Уведомляет ли add () о LinkedBlockingQueue ожидающие потоки? - PullRequest
1 голос
/ 07 июня 2010

У меня есть потребительский поток, берущий элементы из LinkedBlockingQueue, и я делаю его спящим вручную, когда он пуст. Я использую peek(), чтобы увидеть, пуста ли очередь, потому что я должен что-то сделать перед отправкой потока в спящий режим, и я делаю это с queue.wait().


Итак, когда я в другом потоке и add() элемент в очереди, автоматически ли это уведомляет поток, который wait() находится в очереди?

1 Ответ

2 голосов
/ 07 июня 2010

Да, это так. Вернее, он использует более эффективный объект внутренней блокировки, а не блокировку объекта внешней очереди; если вы хотите спать, пока что-то не придет в очередь, выполните блокировку take(). (Если у вас есть другие дела во время ожидания, подумайте, является ли блокирующая очередь правильным способом получения сообщений из других мест.)

...