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

130
17 октября 2019, 07:10

Интересует, как реагирует поток, который закрывается извне, если он содержит работу с сокетной системой, а именно: Закрываются ли сокеты и стирается ли информация о них, если поток закрывается извне с помощью функций .stop() или .interrupt()?

Answer 1

ThreadDeath, провоцируемый методом stop() никакие захваченные потоком ресурсы, не освобождает, только мониторы.

Крайне не рекомендуется останавливать потоки методом stop(), это работает, однако, все мониторы, которые были захвачены в этом потоке (секции кода, обёрнутые synchronized), будут отпущены, что в свою очередь может привести к не консистентному состоянию приложения.

interrupt() же устанавливает внутренний флаг, который вы можете проверить внутри вашего потока, все правильно закрыть и завершить выполнение.

Для этого у потока есть метод isInterrupted() он проверяет флаг прерывания у потока. При этом сам флаг не сбрасывается.

Так же есть метод interrupted() он проверяет был ли установлен флаг прерывания у текущего потока. При этом флаг прерывания после вызова этого метода сбрасывается.

READ ALSO
не реагируют кнопки JMenuBar

не реагируют кнопки JMenuBar

помогите найти ошибкуПрограмма запускается, но кнопки не реагируют на нажатия

138
Ошибка при вызове python скрипта из Runtime

Ошибка при вызове python скрипта из Runtime

Необходимо по команде выполнить запуск python скриптаНе использовал jython т

121
Каждый элемент массива нужно умножить с каждым элементом этого массива и проверить, является ли квадратный корень этого произведения, целым числом

Каждый элемент массива нужно умножить с каждым элементом этого массива и проверить, является ли квадратный корень этого произведения, целым числом

Каждый элемент массива нужно умножить с каждым элементом этого массива и проверить, является ли квадратный корень этого произведения, целым...

110
Как присвоить куки jsoup

Как присвоить куки jsoup

Нужно присвоить куки при входе на сайт

111