我经常需要有一个线程等待另一个线程的结果。似乎在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