【发布时间】:2011-07-10 11:40:41
【问题描述】:
我经常需要让一个线程等待另一个线程的结果。好像java.util.concurrent中应该有对此的一些支持,但是我找不到。
Exchanger 与我所说的非常接近,但它是双向的。我只希望线程 A 在线程 B 上等待,而不是让两者互相等待。
是的,我知道我可以使用 CountDownLatch 或 Semaphore 或 Thread.wait() 然后自己管理计算结果,但似乎我必须在某个地方缺少一个便利类。
我错过了什么?
更新
// 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);
}
【问题讨论】:
-
可以锁定资源吗?它将阻塞调用线程,直到第一个解锁资源。你可以用它做很多事情:download.oracle.com/javase/1.5.0/docs/api/java/util/concurrent/…
-
Exchanger 的另一个问题是它只适用于一对线程。使用 Exchanger,不可能有多个线程等待设置值。
标签: java multithreading java.util.concurrent