如果當執行緒為多執行緒程式,假如存在乙個執行緒a ,現在需要加入乙個執行緒b,並要求執行緒b先執行完畢,在執行a程式,此時可以用thread中的join()方法來完成。舉個例子就好像你正在吃飯,有個人給你打**,你扔下筷子去接**,然後打完**繼續回來吃飯。
下面寫一段**加深理解:
class
timplements
runnable
catch
(interruptedexception e)
//休眠一秒
system.out.
println
(thread.
currentthread()
.getname()
+"-->"
+i);
//獲取當前執行緒名字}}
}public
class
join
}}
執行結果如下:
main--
>
0main--
>
1main--
>
2main--
>
3main--
>
4t1--
>
0t1--
>
1t1--
>
2t1--
>
3t1--
>
4main--
>
5main--
>
6main--
>
7main--
>
8main--
>
9process finished with exit code 0
**分析:主線程執行到i=4的時候,開始執行t1執行緒。 執行緒加入 join方法
join方法用於等待其他執行緒終止 如果執行緒a中呼叫了執行緒b的join方法,那麼執行緒a阻塞,直到執行緒b執行完後,執行緒a從阻塞狀態轉為就緒狀態,等待獲取cpu的使用權。join方法要在start方法呼叫後呼叫才有效,執行緒必須啟動,再加入。例子1 讓兩個執行緒順序列印1,2,3,即執行緒a列...
C 多執行緒一 啟動 加入 分離執行緒
c 執行緒庫啟動執行緒,可以歸結為構造std thread物件 std thread在標頭檔案 std thread 可以用可呼叫 callable 型別構造 啟動執行緒之後,要選擇結束執行緒的方式,等待執行緒結束 加入式.join 還是讓其自主執行 分離式.detach 示例 struct fun...
非同步執行緒池中加入MDC引數
在專案中需要非同步執行任務方法,但是非同步執行時會使用另乙個執行緒。因為mdc的引數時基於threadlocal的,每個執行緒都保留乙份。這樣就造成非同步執行緒的日誌id沒有或者跟前乙個日誌id不一致,不便於查詢日誌。解決方法 自定義任務裝飾器,並配置到執行緒池 bean taskexecutor ...