首页 > 其他分享 >多线程等待

多线程等待

时间:2022-11-15 09:23:29浏览次数:34  
标签:Console Thread System 线程 using new 多线程 等待

多线程等待

温故而知新,好久没有用到,突然忘记 

方法一 CountDownEvent 类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading; //引入线程
using System.Diagnostics; 

namespace ThreadSynchronousDemo
{
    class Program
    {
        static CountdownEvent CountDownWork = new CountdownEvent(2);      

        static void Main(string[] args)
        {

            Console.WriteLine("开始,CountdownEvent 同步");       

            var t = new Thread((() => working("第 1 个工作线程任务", 3)));
            var t2 = new Thread((() => working("第 2 个工作线程任务", 6)));

            //var t3 = new Thread((() => working("第 3 个工作线程任务", 12)));
            t.Start();
            t2.Start();
            //t3.Start();
            Thread.Sleep(TimeSpan.FromSeconds(5));
            Console.WriteLine("开始,线程工作计数");
            CountDownWork.Wait();           

            Console.WriteLine("计数完成,2个工作 已经完成!");
            //如果把上面代码注释的第三个线程还原,释放对象,可以造成第三个线程的抛出错误

            CountDownWork.Dispose();     

            Console.Read();
        } 

        static void working(string message,int seconds)
        {
            Console.WriteLine("工作前休息 {0}",DateTime.Now.Second);
            Thread.Sleep(TimeSpan.FromSeconds(seconds));
            Console.WriteLine(message);          

            CountDownWork.Signal();
            Console.WriteLine("发出计数信号, 工作已经完成一项");      

        }
    }
}

  

方法二

 List<AutoResetEvent> autoResetEvents = new List<AutoResetEvent>() { new AutoResetEvent(false), new AutoResetEvent(false), };

List<AutoResetEvent> autoResetEvents = new List<AutoResetEvent>() { new AutoResetEvent(false), new AutoResetEvent(false), };

 new Thread(() =>
                {
                    //todo 

                    autoResetEvents[0].Set();//释放第一个线程
                }).Start();

 new Thread(() =>
                {
                    //todo 

                    autoResetEvents[1].Set();//释放第二个线程
                }).Start();

 WaitHandle.WaitAll(autoResetEvents.ToArray()); //等待所有线程


 

标签:Console,Thread,System,线程,using,new,多线程,等待
From: https://www.cnblogs.com/wangyonglai/p/16891297.html

相关文章

  • python 多进程 多线程 协程
    多进程-进程池1fromconcurrent.futuresimportProcessPoolExecutor23withProcessPoolExecutor(max_workers=10)asexecutor:4results=executor.map......
  • ActiveMQ经典的使用模式(利用多线程处理消费端)
    今天看视频,里面讲了一个经典的例子,是工作中很常用的,特此将这种模式记录下来.这个例子使用了ActiveMQ的选择器,也使用了之前学的自定义线程池.队列的使用,而且很好的利......
  • 响应式编程(反应式编程)的来龙去脉(同步编程、多线程编程、异步编程再到响应式编程)
    响应式编程的来龙去脉(同步编程、多线程编程、异步编程再到响应式编程)文章目录​​响应式编程的来龙去脉(同步编程、多线程编程、异步编程再到响应式编程)​​​​简介​​​​......
  • Python 自动化中三种等待时间的详解
    自动化测试,是交由机器来执行的一种测试手段,用于提升测试效率,意味着每一次的自动化测试都需要有非常高的成功率,才可以达到提升效率的作用。在自动化测试中,其实就是通过代码......
  • Java多线程(一)
    一.线程的生命周期及五种基本状态关于Java中线程的生命周期,首先看一下下面这张较为经典的图:   上图中基本上囊括了Java中多线程各重要知识点。掌握了上图中的各知......
  • Java多线程简介
    一、线程简介Process进程与Thread线程程序是指令和数据的有序集合,本身没有任何运行的含义,为静态概念。进程是执行程序的一次执行过程,为动态概念。是系统资源分配的单位......
  • Java多线程中的ThreadLocal线程本地变量
    概论ThreadLocal指的是开辟一块统一初始化的空间,在这个区域块里每个线程使用的区域独立,互不干扰。一般创建为对象的静态属性。常用方法:set(value)get(value)子类的initia......
  • Java中指令重排在多线程中出现数据错误的例子
    概述听说当两条指令互相不依赖的时候,在cpu或者jvm那儿可能会为了提高性能而进行指令重排。数据依赖比如下面两条代码就没有数据依赖:int a=5;int b=2;这两条指......
  • 读者-写者(多线程)
     一、同步互斥问题-读者写者问题之写者优先(一)问题要求抽象解释:多个进程访问一个共享的数据区读者(读进程)只能读数据,写者(写进程)只能写数据适用于数据库、文件、内存......
  • 读者-写者(多线程)
    读者-写者(多线程)0推荐在openEuer上实现1描述操作系统中“读者-写者”问题,理解问题的本质,提交你理解或查找到的文本资料2利用多线程完成reader和writer3在main中测......