Как заставить один поток Java ждать результата другого потока?

Мне часто нужно, чтобы поток ждал результата другого потока. Похоже, что для этого должна быть какая-то поддержка в 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 exchanger = new Exchanger();

public void threadA() {
    // perform some computations
    int result = ...;

    exchanger.exchange(result);
}


public void threadB() {

    // retrieve the result of threadA
    int resultOfA = exchanger.exchange(null);
}

5
задан emmby 7 March 2011 в 17:13
поделиться