Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Java: Общие вопросы > Не останавливаются потоки |
Автор: Kreatifchk 7.10.2020, 18:10 | ||||
Имеется такой код:
Tasks - это ArrayBlockingQueue<Runnable> . Переменная unlock - volatile, и когда я меняю ее на true потоки должны остановиться, но почему-то останавливаются только несколько потоков, а остальные продолжают висеть (проверено через дебагер), а в них ничего не исполняется. Выглядит это примерно так: ![]() Но если вставить System.out.println , в конец цикла, вот так
То тогда отлично завершаются все потоки. Такое, же происходит если в собственно задачу в tasks вставить System.out.println . |
Автор: Kreatifchk 7.10.2020, 19:55 |
Причина найдена, метод take у блокирующей очереди в определенный момент блокировал поток, а поскольку задач больше не поступало, блокировка не снималась. Решением стало заменить метод take на pool с таймаутом. |