Sobes.tech
Назад к вопросам
Junior — Middle
60

Можете объяснить, как функционирует механизм прерывания в потоках или процессах?

Компании, где спрашивали
ВТБВТБ

Ответ от нейросети

sobes.tech AI

В Java механизм прерывания потоков используется для того, чтобы сигнализировать потоку о необходимости остановки или изменения своего поведения. Прерывание не останавливает поток сразу, а устанавливает флаг прерывания, который поток должен проверить и корректно обработать.

Основные моменты:

  • Метод interrupt() устанавливает флаг прерывания у потока.
  • Поток может проверить состояние с помощью Thread.interrupted() или isInterrupted().
  • Если поток находится в состоянии ожидания (например, sleep(), wait()), вызов interrupt() вызовет InterruptedException.

Пример:

Thread thread = new Thread(() -> {
    while (!Thread.currentThread().isInterrupted()) {
        // Выполнение работы
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            // Поток был прерван во время сна
            Thread.currentThread().interrupt(); // Восстановить флаг прерывания
            break; // Завершить цикл
        }
    }
    System.out.println("Поток завершён");
});

thread.start();
// Через некоторое время прервать поток
thread.interrupt();

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