Я просматривал часто повторяющийся слух о том, что потоки демона на JVM обрабатывают блоки finally
каким-то особым образом (они не делают, нормально?), когда я читаю это, от учебник Oracle Java:
Примечание. Если JVM завершает выполнение кода
try
илиcatch
, то блокfinally
может не выполняться. Аналогично, если поток, выполняющий кодtry
илиcatch
, прерван или убит, блокfinally
может не выполняться, даже если приложение в целом продолжается.
(Акцент - мой.) И немного о прерывании поймал мой взгляд!
Я убежден, что если поток находится в коде try/catch и прерван, то либо мы (или, в конечном счете, вводим) состояние (например, sleep, wait), где мы заканчиваем тем, что бросаем InterruptedException
, или мы не находимся, и мы выпадаем нормально или ненормально, но во всех случаях мы попадаем в предложение finally
.
Что я пропустил? Есть ли способ прервать поток, а затем пропустить finally
, пока приложение продолжается?