У вас есть два объекта потока: Worker
- это отдельный поток, и вы заключаете его в новый отдельный объект Thread
:
Thread counter = new Thread(new Worker());
Два объекта потока имеют два флага прерывания. Вызов counter.interrupt()
устанавливает флаг прерывания во внешнем объекте потока, а вызов isInterrupted()
проверяет флаг прерывания во внутреннем «рабочем» объекте потока.
Причина, по которой Thread.interrupted()
останавливает поток, заключается в том, что он проверяет флаг прерывания текущего запущенного потока , который в данном случае будет внешним объектом.
Код будет более понятным, если вы избавитесь от объекта внешнего потока и напишете:
Worker counter = new Worker();
counter.start();
counter.interrupt();