Я пишу BlockingQueue и мне интересно, как другие реализации решают эту проблему:
Если у меня есть только один монитор (объект очереди), и пусть производители и потребители wait
, я должен убедиться, что вызывается notifyAll
вместо notify
, в противном случае производитель может только сигнализировать другому ожидающему производителю продолжить, даже если очередь заполнена. Заставить потребителя ждать, несмотря на то, что товар доступен. С другой стороны, вызов notifyAll
не представляется масштабируемым решением для многих потоков и процессоров.
Используют ли BlockingQueue
два монитора? Один ожидал производителей, а второй - потребителей? Тогда мне придется синхронизировать очередь и соответствующий монитор в инкапсулированном виде. Это путь?