Я использую ArrayBlockingQueue
в своем коде. Клиенты будут ждать, пока элемент станет доступным:
myBlockingQueue.take();
Как я могу "закрыть" мою службу, если в очереди нет элементов, а take()
ждет элемента в течение неограниченного времени? Этот метод выбрасывает InterruptedException
. Мой вопрос: как я могу "вызвать" прерывистое исключение, чтобы take()
вышел? (Я также думал о notify()
, но, похоже, я здесь не помог ..)
Я знаю, что могу вставить специальный маркерный элемент "EOF / QUIT", но действительно ли это единственное решение?
ОБНОВЛЕНИЕ (относительно комментария, который указывает на другой вопрос с двумя решениями):
один из упомянутых выше с использованием «Объекта отравленной пилюли», а второй - Thread.interrupt()
:
myBlockingQueue.take()
используется НЕ в Thread
(расширяющий поток), а скорее реализует Runnable
. Кажется, Runnable не предоставляет метод .interrupt()
?
Как я мог прервать Runnable
?