Получение потока для бесконечного ожидания

У меня есть Java Thread, который обрабатывает исходящую связь с помощью Socket. Я хочу, чтобы поток работал только в ожидании вывода, готового к отправке. Скажем, у меня есть Stack<String>, который содержит данные, ожидающие отправки, я бы хотел, чтобы поток comms проснулся, когда что-то добавлено в стек и засыпает, когда стек пуст. Какой лучший подход для этого?

Параметры, которые я вижу,:

  • Использование wait()/notify() - теперь похоже на старый способ достижения этого поведения
  • Проверка потока каждые x миллисекунд, если есть что-то, что нужно отправить
  • Построение нового Thread каждый раз (дорого)
  • Выполнение потока выполняется постоянно (дорого)
  • Реализация некоторого пула потоков или решения для исполнителей

Любые советы были бы замечательными:)

Ответ 1

BlockingQueue - именно то, что вы ищете. Ваш поток связи блокируется на take() и разбуждается сразу, когда какой-то другой поток выполняет add/put.

Этот подход имеет несколько преимуществ: вы можете иметь несколько потоков (потребителей), разделяющих одну и ту же очередь, для увеличения пропускной способности и нескольких потоков (производителей), генерирующих сообщения (передача сообщений).

Ответ 2

Вы можете использовать библиотеку java.util.concurrent, если структуры данных соответствуют вашим потребностям. Что-то вроде BlockingQueue может работать для вас.