У меня есть класс, который содержит набор ссылок на рабочие потоки, которые получают объекты через TCP (1 на каждого клиента).Java: Wait/Notify для нескольких потоков
Я пытаюсь сделать способ getMessage()
в своем классе, который ждет, пока ни один из рабочих потоков не получит сообщение и не вернет его.
То, что я получил прямо сейчас социологическая-система:
public Object getMessage() {
while (true) {
for (Worker w : workers.values())
if (w.msgNumber() != 0)
return w.getLastMsg();
Thread.sleep(100);
}
}
Это работает, но я не думаю, что это очень масштабируемым.
Я знаю, что я могу сделать wait(timeout)
на каждого работника, но проблема остается прежней.
Есть ли какой-нибудь механизм ожидания/уведомления, который ждет несколько потоков?
Вы хотите реализовать версию производитель/потребитель парадигмы. Эта ссылка является хорошим вступлением к этому в Java: http://www.java2s.com/Code/Java/Threads/Producer-Consumer.htm Поиск терминов «производитель потребляет java» дает гораздо больше полезных страниц. – dlev
Вы могли бы, чтобы рабочие потоки уведомляли() основной поток, когда они что-то обработали. В этом случае вы можете использовать wait() (без таймаута) в основном потоке, и он проснется, когда что-то нужно будет сделать. – Jochen