Я читал около Condition
объектов и как они предлагают несколько наборов ожидания для каждого объекта, а также различают, какой объект или группа объектов/потоков получает конкретный сигнал.
Почему нет обычного Object
? Например.Условия vs objects wait/notify
Вместо:
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();
Не у нас еще есть несколько наборов ожидания и различать среди заявленных потоков?
Но с условием мне все равно нужны объекты 'Condition' – Jim
Два условия в порядке, если вам нужно заблокировать только один объект блокировки, а не два разных замка. Это то, что вы не можете сделать с мониторами. –
Здесь довольно много вопросов и ответов. См. Http://stackoverflow.com/questions/3190545/java-wait-notify-and-synchronized-blocks и http://stackoverflow.com/questions/2779484/why-wait-should-always-be-in-synchronized -блочный, для eaxmple. –