Представьте, что у вас есть типичный шаблон производитель-потребитель в Java. Чтобы быть немного более эффективным, вы хотите использовать notify()
, а не notifyAll()
при добавлении нового элемента в очередь. Если два потока-производителя вызывают уведомление, гарантируется ли пробуждение двух отдельных ожидающих потоков-потребителей? Или может быть так, что два notify()
, запущенные вскоре друг за другом, приводят к тому, что один и тот же потребительский поток дважды ставится в очередь для пробуждения? Я не могу найти раздел API, описывающий, как это работает. Есть ли в java какая-то атомарная внутренняя операция для пробуждения потоков ровно один раз?
Если только один потребитель ожидает, то второе уведомление будет потеряно, это не проблема.