Thead.Join()和Thread.Sleep()
2010-12-30 23:04 dytes 阅读(1909) 评论(0) 编辑 收藏 举报Thead.Join()和Thread.Sleep()
C#中Thread类包含的两个常用方法:实例方法Join()和静态方法Sleep(),对于Join()的使用以及和Sleep()的区别一直比较迷糊,小结一下。
Thread.Join()
阻塞调用线程,直至某个线程终止。在此期间,被阻塞线程继续执行标准的COM和SendMessage消息泵。该方法使线程状态包含ThreadState.SleepWaitJoin.
该方法可以用来确认某个线程是否结束。如果线程已经结束,则该方法立即返回,否则阻塞直至线程结束。在某些需要等待其他线程执行结束后,继续后续操作时,可以使用该方法。
该方法有2个带参的重载方法,可以指定阻塞的时间。超时或者线程结束时,该方法将返回。
Thread.Sleep(int milliSec)
在指定的时间段内挂起当前线程。此期间不执行的COM和SendMessage消息泵,也不会被系统调度并执行。该方法使线程状态包含ThreadState.SleepWaitJoin.
测试代码
using System; using System.Threading; public class SleepJoin { public static void Main() { Console.WriteLine("MainThread[" + Thread.CurrentThread.ManagedThreadId + "]"); Thread newThread = new Thread(delegate() { int i = 0; while (++i < 100) { Console.WriteLine("Thread[" + Thread.CurrentThread.ManagedThreadId + "] is running: " + i); Thread.Sleep(10); } }); newThread.Start(); newThread.Join(); Console.WriteLine("newThread finished."); } }
上述测试代码中,在主线程(the calling thread)内调用newThread的Join()方法,导致主线程(the calling thread)被阻塞直至newThread结束,然后主线程继续执行。
作者:dytes
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。