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