У меня есть длительный процесс, в котором из-за ошибки тривиальный / расходуемый поток блокируется потоком, который я хотел бы продолжить, чтобы он мог выполнять некоторые окончательные отчеты, которые было бы трудно воспроизвести в другом путь.
Конечно, исправление ошибки для будущих прогонов - это правильное окончательное решение. Конечно, любое такое принудительное прерывание / уничтожение / остановка любого потока по своей природе небезопасно и может вызвать другие непредсказуемые несоответствия. (Я знаком со всеми стандартными предупреждениями и причинами их возникновения.)
Но, тем не менее, поскольку единственной альтернативой является прекращение процесса JVM и прохождение более длительной процедуры, которая приведет к менее полному окончательному отчету, грязные / устаревшие / опасные / рискованные / одноразовые методы - это именно то, что я хотел бы попробовать.
JVM - это 64-разрядная версия Sun 1.6.0_16 в Ubuntu, а расходуемый поток ожидает блокировки объекта-монитора.
Может ли сигнал ОС, направленный на конкретный поток, создать исключение InterruptedException в потоке с расходными данными?
Может ли подключение с помощью gdb и непосредственное вмешательство в данные JVM или вызов процедур JVM разрешить принудительное освобождение монитора объектов, удерживаемого потоком расходных материалов?
Будет ли Thread.interrupt()
из другого потока сгенерировать InterruptedException
из кадра ожидания до блокировки? (С некоторыми усилиями я могу внедрить произвольный сценарий beanhell в работающую систему.)
Может ли устаревший Thread.stop()
быть отправлен через JMX или любым другим методом удаленного внедрения?
Любые идеи оценены, чем «опаснее», тем лучше! И, если ваше предложение сработало на личном опыте в аналогичной ситуации, лучше всего!