2015-12-12 102 views
0

我有n線程正在執行(線程數組),並且在它們中的每一個線程中,我需要根據其他線程的結果進行一些計算。我如何在一個線程中等待其他線程的結果準備好?如何讓一個線程等待另一個線程導致java?

+0

如果有n個線程,並且每個線程都等待n-1個其他線程,則聽起來像是有死鎖問題。 T1是否需要T2需要T1結果的結果? – ChiefTwoPencils

+1

不要這樣做。相反,只要結果準備就緒,請檢查是否有其他任何可以做的結果,然後派遣該工作。沒有必要有一個線程等待某些事情發生,只是在事情發生時做些事情。 –

回答

0

有兩種選擇。

1)在線程內部需要等待結果,你可以讓它在while循環中休眠。

while(threadResult == null){ 
      this.sleep(your specified amount of time) 
    } 
    // When it finally has a value it will continue. 
    this.value = threadResult; 

2)你可以讓你的線程等待,直到其他人通知它。你需要使用他們都有的共同對象,然後等待並睡在另一個對象上。

你的線程中運行的代碼,當你需要其他的效果,請使用,

CommonObject.wait(); 

當你的其他線程完成其操作並更新你需要,你會通知共有對象的結果,線程等待會繼續其任務。

CommonObject.notify(); 
0

這個問題確實有很多可能的答案。經典之一是使用帶有條件變量的鎖(Java:​​Object.wait()Object.notify())。

或使用Future<T>CompletableFuture<T>

相關問題