Я читаю Java Concurrency In Practice, где это показан пример кода:
public final class Indexer implements Runnable {
private final BlockingQueue<File> queue;
public Indexer(BlockingQueue<File> queue) {
this.queue = queue;
}
@Override
public void run() {
try {
while (true) {
queue.take();
}
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
}
}
с описанием:
Восстановите прерывание. Иногда вы не можете генерировать InterruptedException, например, когда ваш код является частью Runnable . В этих ситуациях вы должны поймать InterruptedException и восстановить состояние прерывания, вызвав прерывание в текущем потоке, чтобы код, находящийся выше по стеку вызовов, мог видеть, что прерывание было вызвано, как показано в листинге 5.10.
В примере кода «код выше стека вызовов» никогда не увидит прерывание, если этот код будет выполнен — или я делаю неправильный вывод? Тема здесь просто умирает после вызова interrupt()
, верно?
Таким образом, единственный способ, которым этот interrupt()
может быть полезен, — это если он находится внутри цикла, верно?