Sobes.tech
Назад к вопросам
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(); // сигнал прерывания

Таким образом, поток сам контролирует момент завершения, реагируя на прерывание.