4 回答

TA貢獻1818條經驗 獲得超11個贊
如果您查看源代碼,Thread::join您會注意到它調用了Thread::join(timeout)方法。查看此方法的源代碼,我們可以看到它通過調用循環檢查線程的狀態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;
}
}
...
因此,如果您調用的線程join終止 -join將返回并且不執行任何操作。

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