1)昨天只有我问了这个问题条件与等待通知机制
2)我想编辑相同的内容并在我的问题中添加一些如果,但因为它可能变得很麻烦并且包含足够的文本以使读者不感兴趣并使读者感到困惑,所以我想在这里提出一个新问题。
3)在我的帖子的上下文中,其 url 在第 1 点给出),考虑 4 个线程的情况,P1,T1 和 P2,T2 作用于单个数据结构“S”。
4)我试图再次利用条件接口而不是等待通知的优势。
5)考虑代码
final Lock lock = new ReentrantLock();
Condition c1 = lock.newCondition();
Condition c2 = lock.newCondition();
Condition c3 = lock.newCondition();
Condition c4 = lock.newCondition();
6) 考虑 P1,T1 使用 c1,c2(以标准 await()/signalAll() 方式)。考虑 P2,T2 在 put,take,put1,take1 方法中分别使用 c3,c4(以标准 await()/signalAll() 方式)。
7) 当我执行 c1.signalAll() 时,只有等待/因为 condition1 的线程才会收到信号。我说得通吗?
8)考虑一个等待/通知机制来实现同样的说法,
private static final Object lock= new Object();
synchronized(lock)
考虑 put,take,put1,take1,因此如果任何线程在满足任何一个条件时执行 lock.notifyAll(),即使由于其他条件而等待/开启的线程也会收到通知。真的吗 ?。这是我们可以算作使用等待/通知而不是条件机制的缺点吗?