Thead.Join()和Thread.Sleep()

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

你可能感兴趣的:(thread)