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结束,然后主线程继续执行。