今天是第一次在C#中接觸Thread自己研究了一下其中ThreadJoin()這個方法下面談談自己的理解
ThreadJoin()在MSDN中的解釋很模糊Blocks the calling thread until a thread terminates
有兩個主要問題
什麼是the calling thread?
什麼是a thread?
首先來看一下有關的概念 我們執行一個exe文件實際上就是開啟了一個進程同時開啟了至少一個線程
但是真正干活的是線程就好比一個Team有好幾個人但是真正干活的是人不是Team
具體到代碼來說以Console Application為例程序Testexe從Main函數開始運行實際上是有一個線程
在執行Main函數我們稱作MainThread假如我們在Main函數中聲明了一個Thread稱作NewThread並且調用了
NewThreadStart()的方法那麼 MainThread在處理Main函數裡面的代碼時遇到NewThreadStart()時就會去調用NewThread
基於上面的討論我們可以得出結論在我們剛才的例子中the calling thread就是MainThread而a thread指的洽洽就是MainThread調用的NewThread線程
現在回到MSDN的解釋我們可以這麼翻譯當NewThread調用Join方法的時候MainThread就被停止執行直到NewThread線程執行完畢這樣就好理解了吧O(∩_∩)O哈哈~
好了前面分析完了現在來看測試用例吧
Title
using System;
using SystemCollectionsGeneric;
using SystemLinq;
using SystemText;
using SystemThreading;
namespace Test
{
class TestThread
{
private static void ThreadFuncOne()
{
for (int i = ; i < ; i++)
{
ConsoleWriteLine(ThreadCurrentThreadName + i = + i)
}
ConsoleWriteLine(ThreadCurrentThreadName + has finished)
}
static void Main(string[] args)
{
ThreadCurrentThreadName = MainThread;
Thread newThread = new Thread(new ThreadStart(TestThreadThreadFuncOne))
newThreadName = NewThread;
for (int j = ; j < ; j++)
{
if (j == )
{
newThreadStart()
newThreadJoin()
}
else
{
ConsoleWriteLine(ThreadCurrentThreadName + j = + j)
}
}
ConsoleRead()
}
}
}
下面是測試的結果
結論從測試中我們可以很清楚的看到MainThread在NewThreadJoin被調用後被阻塞直到NewThread
執行完畢才繼續執行
From:http://tw.wingwit.com/Article/program/net/201311/11942.html