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