У меня возникли проблемы с пониманием семантики флага прерывания потока Java. Насколько я понимаю, флаг должен быть истинным только после того, как поток прерван, и после того, как он установлен в значение true, он не будет снова ложным до тех пор, пока не будет перехвачен InterruptedException
или его эквивалент, или флаг не будет явно очищен с помощью .interrupted()
. Следовательно, я не могу объяснить, почему следующая программа печатает false
:
Thread t = new Thread() {
@Override
public void run() {
try {
// While await()ing, another thread calls t.interrupt().
new CyclicBarrier(2).await();
} finally {
// I believe I should still be interrupted here, but am not...
System.out.println(Thread.currentThread().isInterrupted());
}
}
};
(Некоторые детали исключены для простоты — предположим, что run()
может генерировать исключения.)