定向notifyAll()

时间:2009-07-23 03:19:30

标签: java concurrency wait

我是否可以提问。

假设我的主线程创建了3个线程。 这三个线程在某个对象上调用wait()。 然后主线程调用notifyAll()来获取同一个对象。

如何确保thread2和thread2继续进行,而thread1和thread3只是忽略通知并返回等待状态?

从本质上讲,如何将我的通知指向选定的帖子?

如果我没有弄错,在java 5中这很简单。一个会创建不同的条件并且主线程只满足thread2正在等待的条件。

但是,我如何在pre5中解决它?

干杯, 维克

1 个答案:

答案 0 :(得分:1)

你应该注意,即使没有notify,线程也可以自发唤醒。所以你总是需要某种条件。代码的一般形式是:

synchronized (lockObj) {
    while (!condition) {
        lockObj.wait();
    }
}

可能有性能原因只能唤醒执行特定操作的线程。对于java.util.concurrent.locks的调查,请注意这是一个性能问题,而不是正确的问题。