一千萬個為什麽

搜索

Java等待線程問題

我有一個線程,我需要等待其結果,如下所示:

t1.start();
while (variableModifiedByMyThread == null) {
    /* do nothing */
}
// "t1" set the value of "variableModifiedByMyThread"

上面的代碼正在工作,但不是一個很好的解決方案...

這段代碼是否執行相同的操作(是否等待“t1”線程)?

t1.start();
try {
    t1.join();
} catch (InterruptedException e) {
    e.printStackTrace();
}
// "t1" thread finished

最佳答案

前者正在等待變量被設置,後者正在等待線程死亡。如果在線程死亡之前設置變量,則除了以下幾點之外幾乎沒有什麽區別:

  • 前者“旋轉” - 等待線程始終在做一些事情(檢查變量) - 非常浪費!
  • 後者可能被另一個線程中斷。

轉載註明原文: Java等待線程問題