Java. Многопоточность. Урок 9. Прерывание потоков

YOUTUBE · 30.11.2025 08:06

Ключевые темы и таймкоды

Введение в прерывание потоков

0:00
  • Обсуждение прерывания потоков в Java.
  • Объяснение, что поток прерывается при возврате метода `run` или возникновении неперехваченного исключения.
  • Пример с сервером и двумя потоками: один общается с сервером в бесконечном цикле, другой проверяет условия и выключает сервер при необходимости.

Использование `meta-stop`

0:58
  • Объяснение работы `meta-stop` для принудительного прерывания потока.
  • Пример кода: создание первого потока для общения с сервером и второго потока для проверки условий и выключения сервера.

Реализация метода `do`

1:53
  • Определение метода `do` для имитации работы с сервером: печать сообщений о запросе и ответе, сон на одну секунду.
  • Использование констант для хранения сообщений и времени сна.

Работа с `TimeUnit`

4:15
  • Объяснение использования `TimeUnit` для более удобочитаемого кода вместо перевода единиц времени в миллисекунды.
  • Примеры использования `TimeUnit` для сна на разные промежутки времени.

Создание и запуск потоков

6:05
  • Создание потока для общения с сервером и его запуск.
  • Объявление метода для определения необходимости выключения сервера.
  • Создание потока для проверки условий и выключения сервера при необходимости.

Тестирование программы

11:13
  • Запуск программы и наблюдение за процессом общения с сервером.
  • Остановка сервера и завершение работы программы.

Устаревание `stop` и альтернатива

12:32
  • Упоминание об устаревании метода `stop`.
  • Объяснение работы метода `interrupt`: установка состояния прерывания потока, но не принудительное прерывание.
  • Необходимость периодической проверки свойства `interrupt` в потоке.

Прерывание потоков

13:27
  • Поток, который прерывает другой, может только попросить его прерваться.
  • Второй поток сам решает, прерываться ли ему.
  • В классе есть поле `interrupt` типа `boolean` для отслеживания состояния прерывания.

Применение метода `interrupt`

14:19
  • Метод `interrupt` присваивает полю `interrupt` значение `true`, сигнализируя о прерывании потока.
  • Пример использования: проверка состояния прерывания потока, который общается с сервером.

Запуск и проверка прерывания

15:33
  • Удаление вызова метода `sleep` для демонстрации прерывания.
  • Запуск программы и проверка реакции потока на прерывание.

Реакция на прерывание

17:02
  • Изменение условия цикла `while` для корректной реакции на прерывание.
  • При прерывании поток завершает работу и переходит в состояние `terminated`.

Исключение `InterruptedException`

18:51
  • Исключение `InterruptedException` возникает, когда метод `interrupt` вызывается для заблокированного потока.
  • Демонстрация работы исключения с методом `sleep`.

Обработка исключения

20:52
  • Метод `sleep` отслеживает состояние прерывания и генерирует исключение при вызове `interrupt`.
  • Прерванный поток может продолжить работу или прерваться.

Методы `interrupt` и `isInterrupted`

22:31
  • Различие между методами `interrupt` и `isInterrupted`: первый устанавливает `interrupt` в `false`, второй только проверяет состояние.
  • Важность правильной обработки исключения `InterruptedException`.

Проверка состояния прерывания

23:27
  • После обработки исключения `InterruptedException` значение `interrupt` равно `false`.
  • Для внешней проверки состояния прерывания рекомендуется использовать статический метод.

Заключение

24:52
  • Благодарность зрителям.