4 回答

TA貢獻1818條經(jīng)驗 獲得超11個贊
如果您查看源代碼,Thread::join您會注意到它調(diào)用了Thread::join(timeout)方法。查看此方法的源代碼,我們可以看到它通過調(diào)用循環(huán)檢查線程的狀態(tài)Thread::isAlive:
...
if (millis == 0 L) {
while (this.isAlive()) {
this.wait(0 L);
}
} else {
while (this.isAlive()) {
long delay = millis - now;
if (delay <= 0 L) {
break;
}
this.wait(delay);
now = System.currentTimeMillis() - base;
}
}
...
因此,如果您調(diào)用的線程join終止 -join將返回并且不執(zhí)行任何操作。

TA貢獻1877條經(jīng)驗 獲得超6個贊
我嘗試總結(jié)一下,同時添加解釋。
的要點thread.join()
是等待線程終止。這就是它在join 文檔中告訴您的內(nèi)容:
等待這個線程結(jié)束。
等待已終止的線程終止非常簡單(?。?,并且似乎沒有合乎邏輯的理由將等待已終止的線程終止視為錯誤。您想知道線程何時結(jié)束。它有。
更重要的是,如果調(diào)用者必須確保線程在等待它終止之前沒有終止,這將創(chuàng)建一個每個調(diào)用者都必須補償?shù)挠嫊r窗口?,嵥榈男蛄?/p>
?Thread?t?=?new?Thread(…); ?t.start(); ?t.join();
由于其固有的種族危險,很容易失敗。換句話說,那將是一種糟糕的設(shè)計方式join
。

TA貢獻1862條經(jīng)驗 獲得超7個贊
線程將開始執(zhí)行。將打印 Run 然后線程將休眠 5 秒,然后打印 Begin 和 End
控制臺輸出:
跑步
---- 5秒睡眠------
開始
結(jié)尾
添加回答
舉報