Назад к вопросам
Senior
12
Как поток может сообщить, что его можно прервать, чтобы выполнился другой поток?
Компании, где спрашивали
Velenes.Tech
Ответ от нейросети
sobes.tech AI
В Java поток может сообщить, что его можно прервать, с помощью механизма прерывания (interruption). Для этого вызывается метод interrupt() у объекта потока. Внутри самого потока нужно периодически проверять флаг прерывания с помощью методов Thread.interrupted() или isInterrupted(). Если поток обнаруживает, что он был прерван, он может корректно завершить свою работу, освободить ресурсы и выйти.
Пример:
public class MyRunnable implements Runnable {
@Override
public void run() {
while (!Thread.currentThread().isInterrupted()) {
// Выполнение работы
try {
Thread.sleep(1000); // может выбросить InterruptedException
} catch (InterruptedException e) {
// Поток был прерван во время сна
Thread.currentThread().interrupt(); // восстановить флаг прерывания
break; // выйти из цикла
}
}
System.out.println("Поток завершен");
}
}
// В другом месте:
Thread thread = new Thread(new MyRunnable());
thread.start();
// ...
thread.interrupt(); // сигнал прерывания
Таким образом, поток сам контролирует момент завершения, реагируя на прерывание.