ManualResetEvent的理解和使用[通俗易懂]

ManualResetEvent的理解和使用[通俗易懂]classProgram{staticvoidMain(string[]args){//注意:ManualResetEvent可以对所有进行等待的线程进行统一控制//true-初始状态为发出信号;false-初始状态为未发出信号ManualResetEventm…

大家好,又见面了,我是你们的朋友全栈君。

class Program
    {
        static void Main(string[] args)
        {
            //注意:ManualResetEvent可以对所有进行等待的线程进行统一控制

            //true-初始状态为发出信号;false-初始状态为未发出信号
            ManualResetEvent mre = new ManualResetEvent(false);
            //线程池开启10个线程
            for (int i = 0; i < 10; i++)
            {
                int k = i;
                
                ThreadPool.QueueUserWorkItem(t =>
                {
                    Console.WriteLine($"这是第{k+1}个线程,线程ID为{Thread.CurrentThread.ManagedThreadId}");
                    //等待信号,没有信号的话不会执行后面的语句,因为初始状态是false,所以后面的语句暂时不会执行
                    mre.WaitOne();
                    Console.WriteLine($"第{k+1}个线程获得信号,线程ID为{Thread.CurrentThread.ManagedThreadId}");
                });
            }
            Thread.Sleep(5000);
            Console.WriteLine("\r\n 5秒后发出信号... \r\n");
            //Set()方法:释放信号,所有等待信号的线程都将获得信号,开始执行WaitOne()后面的语句
            mre.Set();
            Console.ReadKey();
        }
    }

执行结果如图

ManualResetEvent的理解和使用[通俗易懂]

可见,没有信号时,WaitOne()后面的语句都不执行(被阻塞),当Set()释放信号后,所有阻塞的线程都开始继续执行。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/161165.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • MySQL—内连接和外连接区别

    MySQL—内连接和外连接区别区别内连接(innerjoin):取出两张表中匹配到的数据,匹配不到的不保留 外连接(outerjoin):取出连接表中匹配到的数据,匹配不到的也会保留,其值为NULL示例表users表mysql>select*fromusers;+—-+——-+|id|name|+—-+——-+|1|john||2…

    2022年8月30日
    7
  • Vue上传图片并展示

    Vue上传图片并展示上传图片并展示

    2022年6月18日
    24
  • Linux磁盘扩容 之 LVM 扩容之路

    Linux磁盘扩容 之 LVM 扩容之路引言众所周知,我们大多数服务都是跑在Linux上的,因为Linux命令行形式的特性,也导致了很多开发者只喜欢把Linux当做跑服务的机器,并不作为日常的使用。这样导致了我们只能记得常用的部署命令,但遇到一些复杂的Linux运维就不知如何下手了。这不,我这两天就遇到了服务器磁盘不足的问题,一开始只想Google一下快速搞定,结果还是得补补Linux中LVM的这块知识点才可以。为了方便后人快速扩容,特此记录。LVM是什么LVM(LogicalVolumeManager)翻译过来是逻辑卷管理器,大家可

    2022年6月20日
    29
  • httpwatch初级使用[通俗易懂]

    httpwatch初级使用[通俗易懂]一 概述:HttpWatch强大的网页数据分析工具.集成在InternetExplorer工具栏.包括网页摘要.Cookies管理.缓存管理.消息头发送/接受.字符查询.POST 数据和目录管理功能.报告输出 HttpWatch 是一款能够收集并显示页页深层信息的软件。它不用代理服务器或一些复杂的网络监控工具,就能够在显示网页同时显示网页请求和回应的日志信息。甚至可以显示浏览器缓存和IE

    2025年7月21日
    4
  • 阿里时间同步服务器地址

    阿里时间同步服务器地址阿里云提供了7个NTP时间服务器也就是Internet时间同步服务器地址ntp1.aliyun.comntp2.aliyun.comntp3.aliyun.comntp4.aliyun.comntp5.aliyun.comntp6.aliyun.comntp7.aliyun.com转载于:https://www.cnblogs.com/glc400/p/8330094.html…

    2022年7月16日
    31
  • 【CEGUI】CEGUI入门篇之初始化(一)[通俗易懂]

    【CEGUI】CEGUI入门篇之初始化(一)[通俗易懂]以下内容翻译自http://static.cegui.org.uk/docs/0.8.7/rendering_tutorial.html1、简介初始化CEGUI时,不管其渲染API或渲染引擎是什么,都包括三个基本步骤:(1)创建一个基于CEGUI::Renderer对象的实例。(2)创建CEGUI::System对象,参数为上一步创建的Renderer实例。(3)每一帧都调用CEGUI:

    2022年7月24日
    8

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号