多线程中 ManualResetEvent 的用法[通俗易懂]

多线程中 ManualResetEvent 的用法[通俗易懂]///<summary>///手动重启///</summary>privateManualResetEventmanualReset=newManualR

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

        /// <summary>
        /// 手动重启
        /// </summary>
        private ManualResetEvent manualReset = new ManualResetEvent(false);
                if (suspend)
                {
                    manualReset.WaitOne();//暂停发送
                }
            SuspendCommand = new RelayCommand(o => { suspend = true; manualReset.Reset(); });
            RestoreCommand = new RelayCommand(o=> { suspend = false; manualReset.Set(); });

它可以通知一个或多个正在等待的线程已发生事件,允许线程通过发信号互相通信,来控制线程是否可心访问资源

 ## 

ManualResetEvent manualReset = new ManualResetEvent(false);
构造函数参数为 False:代表无信号,True:代表有信号
当无信号时,manualReset.WaitOne(); 代表没人通知它,所以它默认就是阻塞状态。调用Set()方法后代表有人通知它来信号了,它将停止阻塞。
当有信号时,manualReset.WaitOne(); 代表有人通知它,它将无阻塞。 调用Reset()方法代表有人通知它现在信号没了,它将继续开始阻塞。

 在多线程开发中,时常用到 ManualResetEvent 与 AutoResetEvent  。 它们如同道路交通中的信号灯。两者之间有什么区别呢?

共同点:

           均继承 EventWaitHandle 接口,因此,均具有以下功能:

           Reset() //红灯

           Set() //绿灯

           WaitOne() // 等待信号

 

不同点:

            AutoResetEvent   收到 Set 后 , 一次只能执行一个线程,其它线程继续 WaitOne 。

           ManualResetEvent  收到 Set 后,所有处理 WaitOne 状态线程均继续执行。

参考文章:https://www.cnblogs.com/howtrace/p/11362284.html  https://www.cnblogs.com/li-peng/p/3291306.html

 

运行图说明:

多线程中 ManualResetEvent 的用法[通俗易懂]

图片来源:https://www.cnblogs.com/lihuali/p/11672088.html

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

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

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


相关推荐

  • Android中的shell循环命令

    Android中的shell循环命令新建test.txt,写入:i=0;while[$(($i))-le5];doi=$(($i+1));echo$i;done;执行这个文件adbshell<test.txt

    2022年7月24日
  • android默认打开方式修改_setcontenttype方法

    android默认打开方式修改_setcontenttype方法android打开文件,intent的使用

    2022年10月14日
  • 细说SDRAM控制器

    细说SDRAM控制器SDRAM的基本概念SDRAM凭借其极高的性价比,广泛应用于高速数据存储、实时图像处理等设计当中,但是相对于SRAM、FIFO等其他存储器件,SDRAM的控制相对复杂。虽说是复杂,但也不代表没办法实现,仔细梳理一下,发现SDRAM的控制其实也没这么难。本文就SDRAM的基本概念以及其工作流程做简要介绍。SDRAM的基本信号:SDRAM的基本信号(电源以及地线在这里不讨论)可以…

    2022年7月25日
  • 方格子服务器系统,方格子无盘服务器配置推荐方案[通俗易懂]

    方格子服务器系统,方格子无盘服务器配置推荐方案[通俗易懂]方格子无盘服务器配置推荐方案内容精选换一换虚拟私有云使用限制如表1所示。以上配额说明针对单租户情况。一个网络ACL单方向拥有的规则数量最好不超过20条,否则可能引起网络ACL性能下降。二层网关连接在公测期间默认只能创建1个二层连接网关。默认情况下,一个用户可以创建100个安全组。默认情况下,一个安全组最多只允许拥有50条安全组规则。默认情况下,一个云服务器或扩展网卡建议选择安全组华为云最佳实践,…

    2022年10月4日
  • rpcbind

    rpcbind一、介绍通俗的来说,rpcbind是NFS中用来进行消息通知的服务。一般情况下rpcbind运行在111端口。并且NFS配置开启rpcbind_enable="YES"

    2022年7月3日
  • JS实现常见数据结构:哈希表[通俗易懂]

    哈希表特点:存储键值对的数据结构,哈希表内部是使用一个hash函数把传入的键转换成一串数字,而这串数字将作为键值对实际的key,通过这个key查询对应的value非常快。哈希表方法:1.add:添加一组键值对。2.remove:删除一组键值对。3.lookup:查找一个键对应的值。

    2022年4月13日

发表回复

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

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