我正在阅读关于Condition
对象以及它们如何为每个对象提供多个等待集并区分哪个对象或对象/线程组获得特定信号。
为什么不经常Object
这样做?例如。条件与对象等待/通知
相反的:
final Condition notFull = lock.newCondition();
final Condition notEmpty = lock.newCondition();
lock.lock();
try {
while (count == items.length)
notFull.await();
items[putptr] = x;
if (++putptr == items.length) putptr = 0;
++count;
notEmpty.signal();
我们这样做:
final Object notFull = new Object();
final Object notEmpty = new Object();
lock.lock();
try {
while (count == items.length)
notFull.wait();
items[putptr] = x;
if (++putptr == items.length) putptr = 0;
++count;
notEmpty.notify();
难道我们还有多观望台,并通知线程间的区别?
但条件我仍然需要'条件'对象 – Jim 2013-02-12 12:36:45
只要你必须锁定一个锁对象,而不是两个不同的锁,两个条件是可以的。这是你无法用显示器做的。 – 2013-02-12 12:47:33
这里有很多关于这个话题的问答。请参阅http://stackoverflow.com/questions/3190545/java-wait-notify-and-synchronized-blocks和http://stackoverflow.com/questions/2779484/why-wait-should-always-be-in-synchronized - 块,为eaxmple。 – 2013-02-12 13:35:32