我經常需要有一個線程等待另一個線程的結果。似乎在java.util.concurrent中應該有一些支持,但我找不到它。如何讓一個java線程等待另一個線程的結果?
Exchanger非常接近我所說的,但它是雙向的。我只想讓線程A在線程B上等待,而不是彼此等待。
是的,我知道我可以使用CountDownLatch或Semaphore或Thread.wait(),然後自己管理計算結果,但似乎我必須在某處丟失便利類。
我錯過了什麼?
UPDATE
// An Example which works using Exchanger
// but you would think there would be uni-directional solution
protected Exchanger<Integer> exchanger = new Exchanger<Integer>();
public void threadA() {
// perform some computations
int result = ...;
exchanger.exchange(result);
}
public void threadB() {
// retrieve the result of threadA
int resultOfA = exchanger.exchange(null);
}
你可以鎖定資源嗎?它會阻塞調用線程,直到第一個解鎖資源。您可以使用它做很多事情:http://download.oracle.com/javase/1.5.0/docs/api/java/util/concurrent/locks/Lock.html – 2011-03-07 20:22:28
Exchanger的另一個問題是它只適用於**線程對**。使用交換器,不可能有多個線程等待要設置的值。 – sjlee 2011-03-08 05:57:23