2015-11-24 4 views
-2

У меня есть несколько потоков в массиве. Все потоки работают на LinkedBlockingQueue. Каждый поток принимает элемент (который является именем файла) из очереди, считывает его зависимости (простой ввод-вывод) и добавляет эти зависимости в очередь, чтобы мы могли получить их зависимости. В какой-то момент очередь будет пустой (когда мы обнаружим все зависимости). Вопрос в том, как я могу проверить, ждут ли все потоки от элемента из очереди, и если да, то как мне их закончить? Я «взломал» его на работу, используя метод опроса (long timeout, TimeUnit unit), но я хочу завершить их из основного метода.Завершение потоков Java

EDIT: Я не могу завершить работу при условии, что очередь пуста, потому что сначала у нас может быть только один файл в очереди, а когда поток обрабатывает его, очередь пуста некоторое время, пока новый обнаружены зависимости.

Заранее спасибо.

+0

Покажите нам код, пожалуйста. Не понимаю, почему поток не может обнаружить, что очередь пуста, а затем завершается? –

ответ

1

Представьте себе, что атомное целое подсчитывает количество потоков, которые «не работают». Как только основной признак того, что этот счетчик достигает длины массива N, заложил ли он N специальных элементов в очередь, которые, когда они получены потоком, заставят его закончить.

+0

Приятная идея, но вместо того, чтобы связывать поток, ожидающий окончания обхода, почему бы последнему работнику не войти в состояние отсутствия работы, отправить сигнал выключения? –

+0

@jameslarge Абсолютно. Есть много возможностей ... –

Смежные вопросы