Получение потока для бесконечного ожидания
У меня есть Java Thread
, который обрабатывает исходящую связь с помощью Socket
. Я хочу, чтобы поток работал только в ожидании вывода, готового к отправке. Скажем, у меня есть Stack<String>
, который содержит данные, ожидающие отправки, я бы хотел, чтобы поток comms проснулся, когда что-то добавлено в стек и засыпает, когда стек пуст. Какой лучший подход для этого?
Параметры, которые я вижу,:
- Использование
wait()/notify()
- теперь похоже на старый способ достижения этого поведения
- Проверка потока каждые x миллисекунд, если есть что-то, что нужно отправить
- Построение нового
Thread
каждый раз (дорого)
- Выполнение потока выполняется постоянно (дорого)
- Реализация некоторого пула потоков или решения для исполнителей
Любые советы были бы замечательными:)
Ответы
Ответ 1
BlockingQueue
- именно то, что вы ищете. Ваш поток связи блокируется на take()
и разбуждается сразу, когда какой-то другой поток выполняет add
/put
.
Этот подход имеет несколько преимуществ: вы можете иметь несколько потоков (потребителей), разделяющих одну и ту же очередь, для увеличения пропускной способности и нескольких потоков (производителей), генерирующих сообщения (передача сообщений).
Ответ 2
Вы можете использовать библиотеку java.util.concurrent, если структуры данных соответствуют вашим потребностям. Что-то вроде BlockingQueue может работать для вас.