|
Модераторы: LSD, AntonSaburov |
|
Kreatifchk |
|
||||
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 11.7.2015 Репутация: нет Всего: нет |
Имеется такой код:
Tasks - это ArrayBlockingQueue<Runnable> . Переменная unlock - volatile, и когда я меняю ее на true потоки должны остановиться, но почему-то останавливаются только несколько потоков, а остальные продолжают висеть (проверено через дебагер), а в них ничего не исполняется. Выглядит это примерно так: Но если вставить System.out.println , в конец цикла, вот так
То тогда отлично завершаются все потоки. Такое, же происходит если в собственно задачу в tasks вставить System.out.println . |
||||
|
|||||
Kreatifchk |
|
|||
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 11.7.2015 Репутация: нет Всего: нет |
Причина найдена, метод take у блокирующей очереди в определенный момент блокировал поток, а поскольку задач больше не поступало, блокировка не снималась. Решением стало заменить метод take на pool с таймаутом.
|
|||
|
||||
Правила форума "Java" | |
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |