Как убить отправленный Callable, выполняя бесперебойный ввод-вывод, который не вернется
Я пытаюсь создать ПРОСТОЙ тестовый набор для отправки в IBM для решения этой проблемы.
Я подумал, что было бы просто сгенерировать тестовый пример JUnit или небольшое основное приложение, которое выполняло вызовы, и показать, что вызов MQ никогда не возвращался. Я решил использовать службу Executor, обернуть свой вызов MQ в Callable и отправить его в службу executor с помощью Future.get() с указанным интервалом времени ожидания.
Конечно, время ожидания истекло, но приложение не умрет. Если я использую Assert.fail() или когда ловится исключение тайм-аута, этого не происходит, хотя трассировка стека исключения тайм-аута действительно печатается. Я могу убить программу только извне или вызвав System.exit(). Я бы тоже не хотел этого делать. Есть ли способ убить поток в рамках пакета java.util.concurrent?
Эта проблема предлагает решение, но с оговоркой
Пока вы не делаете бесперебойную блокировку вызовов в своей задаче
Но это именно то, что я делаю. Есть ли ЛЮБОЙ способ убить программу, которая вызывает непрерывный ввод-вывод изнутри?
1 ответ
При работе с внешним вводом-выводом обычным способом уничтожения процесса, выполняющего соединение, является закрытие сокета, подключенного к удаленному серверу.
При этом вы получите исключение ввода-вывода, но процесс прекратится, и поток из пула перестанет работать.