При текущей реализации выводится: 4 3 2 1 Марш!
На мой взгляд, т.к. через 3,5 секунды вызывается clockthread.interrupt(), цикл while должен остановиться т.к. current.isInterrupted() = false и пойти в catch.
Но этого не происходит. Почему?
Спасибо
Pavel
17 уровень
Почему поток не прерывается при вызове clockthread.interrupt()?
Решен
Комментарии (5)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Pavel
18 сентября 2018, 07:27
0
Антон Кашников
18 сентября 2018, 07:37
Ты проверял вывод своей программы? тебя не смутило что некоторые цифры выводятся пару раз? Дело в том что ты запускаешь поток дважды:
1.
Ты в конструкторе вызываешь унаследованый метод start(); Тоесть, поток запускается сразу после создания.
2.
Второй раз.
0
Антон Кашников
18 сентября 2018, 07:40
Если ты закомментировал второй вызов,то прерывать нужно источник первого вызова. А ты прерываешь источник закомментированого вызова
0
Pavel
20 сентября 2018, 09:00
Антон, это понятно, потому что иначе бы цикл прерывался, чего не происходит.
Непонятно, какой объект отвечает за первый и второй, т.е.
1. почему current это не поток RacingClock (дочерней нити)? ведь он образуется в методе run класса RacingClock
2. у какого объекта проверять isInterrupted, если не у current?
Спасибо.
0
Pavel
20 сентября 2018, 09:37решение
Разобрался.
1. Поменял clockthread.interrupt на clock.interrupt и убрал clockthread вообще.
2. Убрал current вообще, т.е. в в условии цикла пишу !isinterrupted().
+2