Join,單詞本事就是連接的意思。
先貼出幾段代碼猜猜結果。
<1> public static int Main()
{
Alpha oAlpha = new Alpha();
Thread Thread1 = new Thread(delegate() {
Console.WriteLine("A");
});
Thread1.Start();
Console.WriteLine("a");
return 0;
}
結果是先打印 A 還先打印 a ?
<2> public static int Main()
{
Alpha oAlpha = new Alpha();
Thread Thread1 = new Thread(delegate() {
Console.WriteLine("A");
});
Thread1.Start();
Thread1.Join();//注意這裏
Console.WriteLine("a");
return 0;
}
結果是先打印 A 還先打印 a ?
------------------------------------------------------
<3>
static void Main(string[] args)
{
//線程A
Thread ThreadA = new Thread(delegate()
{
for (int i = 0; i < 10; i++)
{
Console.WriteLine("A : " );
if (i == 9)
{
break;
}
Thread.Sleep(1000);
}
});
//線程B
Thread ThreadB = new Thread(delegate()
{
for (int i = 0; i < 5; i++)
{
Console.WriteLine("B : ");
if (i == 4)
{
break;
}
Thread.Sleep(1000);
}
ThreadA.Join();//在這裏插入線程A
for (int i = 0; i < 5; i++)
{
Console.WriteLine("C : " );
if (i == 4)
{
break;
}
Thread.Sleep(1000);
}
});
ThreadA.Start();
ThreadB.Start();
}
<4>
public static int Main()
{
Thread.CurrentThread.Join();
Console.WriteLine("O(∩_∩)O哈哈");
return 0;
}
----------------------------------------------------
運行結果:
1 A 和 a不分先後,Thread1線程很簡單啓動耗時非常小,Thread1線程和主線程幾乎是同步的,所以打印A a不分前後根據CPU當時運行環境決定。
2 先打印A 再打印 a ,因爲Thread1執行了Join(),相當於在主線程中添加了Thread1線程,就是說只有當Thread1執行結束之後主線程才能繼續執行。換句話說在主線程中嵌了一段代碼,只有這段代碼執行結束(這裏不要以爲調用了Join()線程Thread1會從頭開始執行,不明白這句話可以運行下第3端程序),主線程纔可以繼續執行後面的代碼。
3 前5秒 A B交替出現,然後A出現5次,C出現5次。
如果註釋掉ThreadA.Join(),那麼結果是前5秒AB 交替出現 後5秒AC交替出現。
這裏我就不再羅嗦了。還是那樣線程B中join了線程A只有A執行結束,纔可以繼續執行線程B中剩下的代碼。
join其實就是使異步執行線程轉爲同步執行。
4 主線程被終止
原來多線程中的join()是這麼回事
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章
如果同事暗中傷害你,應該怎麼辦?
這個饅頭有餡
2019-02-24 13:59:08
職場中,抱怨越多的員工,越被領導瞧不起!
這個饅頭有餡
2019-02-24 13:59:08
老程序員被裁,應屆生卻能月薪 1.3 萬?這你能忍?
前端高達
2019-02-24 13:48:04
遇到到處蹭吃卻從不請客吃飯的主怎麼辦?
樑軍年
2019-02-24 13:26:35
Linux基本操作命令
wbzjacky
2019-02-24 13:12:38
高標準機房綜合配線安裝
wbzjacky
2019-02-24 13:12:38
IPsec ***實驗
wbzjacky
2019-02-24 13:12:37
真實的模擬***綜合實驗
wbzjacky
2019-02-24 13:12:37
CISCO路由AAA的Easy ***
wbzjacky
2019-02-24 13:12:37
三層交換機的HSRP、vlan、端口聚合
wbzjacky
2019-02-24 13:12:37
C# 基於SharpPcap的局域網數據包捕獲 之二 監聽代碼
優惠碼大使
2019-02-24 19:41:12
java性能優化筆記(二)設計優化
kid2412
2019-02-24 13:34:37