AutoResetEvent和ManualResetEvent的异同
<div id="cnblogs_post_body">一般情况下多线程总是无序的,要使其按照一定的顺序执行(比如B线程必须在A线程执行完毕之后才执行)。可以采用调用Thread的Join方式,也可以使用&ldquo;信号&rdquo;类的方式完成此任务。常见的信号类有AutoResetEvent和ManualResetEvent。一般情况下,可以给它们的默认构造函数传入false,这就表示当前初始化该信号源准备发送信号,当调用了WaitOne方法的时候把当前的线程阻塞,直到接受到信号为止(发送信号使用Set函数)。下面是一个例子:<div class="cnblogs_code">public class Example { /// <summary> /// 预备信号,准备发送,初始化 /// </summary> public static AutoResetEvent flag = new AutoResetEvent(false); public void Begin() { Thread th = new Thread(() => { for (int i = 1; i < 6; i++) { Thread.Sleep(1000); Console.WriteLine("子线程数据:"+i); } flag.Set(); }); th.IsBackground = true; th.Start(); } static void Main(string[] args) { Example e = new Example(); e.Begin(); //等待该信号接受到完毕,才执行主线程中的任务循环 flag.WaitOne(); for (int i = 1; i < 6; i++) { Thread.Sleep(1000); Console.WriteLine("主线程数据:"+i); } } }
页:
[1]