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()释放信号后,所有阻塞的线程都开始继续执行。

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • 解除80端口占用_443端口和80端口被占用

    解除80端口占用_443端口和80端口被占用有朋友问到,我本地phpnow,想使用80端口,但是每次都提示端口占用,有什么办法可以解决,那么最模板找出相关资料,提示如下:开始–运行–cmd进入命令提示符输入netstat-ano即可看到所有连接的PID之后在任务管理器中找到这个PID所对应的程序如果任务管理器中没有PID这一项,可以在任务管理器中选”查看”-“选择列”经常,我们在启动应用的时候发现系统需要的端口被别的程序占用,…

  • win10桌面的图标变成了白色_win7桌面图标白色方块

    win10桌面的图标变成了白色_win7桌面图标白色方块电脑是我们经常使用的工具,不过有的时候就会遇到问题,比如有的朋友遇到了win10电脑桌面图标全部变成白色的情况,那么电脑桌面图标全部变成白色文件了怎么办呢?很多朋友不太了解处理方法,下面就来教你win10电脑桌面图标全部变成白色的解决方法。…

    2022年10月18日
  • 远程连接oracle01017,sqlplus远程sys用户登录ora 01017的解决方法「建议收藏」

    远程连接oracle01017,sqlplus远程sys用户登录ora 01017的解决方法「建议收藏」UsingORAPWDWhenyouinvokethispasswordfilecreationutilitywithoutsupplyinganyparameters,youreceiveamessageindicatingtheproperuseofthecommandasshowninthefollowingsampleoutput…

  • redis有效时间设置及时间过期处理_java设置cookie过期时间

    redis有效时间设置及时间过期处理_java设置cookie过期时间1.引入注解RedisTemplate@AutowiredprivateRedisTemplateredisTemplate;2.调用redisTemplate.opsForValue().set(参数1,参数2,参数3,参数4);参数1:是key键参数2:是值是存入redis里的值参数3:时间,类型为long参数4:时间类型,如:TimeUnit.MILLISECONDS代表分钟TimeUnit.SECONDS代表秒,还有天,周,月,年自己测试redisT

  • JDBC预处理对象prepareStatement[通俗易懂]

    JDBC预处理对象prepareStatement[通俗易懂]JDBC预处理对象prepareStatement概述一、SQL注入问题SQL注入:用户输入的内容作为了SQL语句语法的一部分,改变了原有SQL真正的意义。假设有登录案例SQL语句如下:SELECT*FROM用户表WHERENAME=用户输入的用户名ANDPASSWORD=用户输的密码;此时,当用户输入正确的账号与密码后,查询到了信息则让用户登录。但是当用户输入的账…

  • Parallel.For循环 和 Parallel.ForEach循环

    Parallel.For循环 和 Parallel.ForEach循环大多时候,我们的循环结构的每一次迭代依赖于上一次迭代的计算或行为。但是,有的时候又不是这样。如果迭代之间彼此独立,并且程序运行在多核处理器的机器上,如果能将不同的迭代放在不同的处理器上并行处理的话,将会受益匪浅。Parallel.For和Parallel.ForEach结构就是这样做的。一、Parallel.For1、Parallel.For方法有12个重载:publics…

发表回复

您的电子邮箱地址不会被公开。

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