Мне часто нужно, чтобы поток ожидал результата другого потока.Похоже, в 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);
}