Как убить отправленный Callable, выполняя бесперебойный ввод-вывод, который не вернется

Я пытаюсь создать ПРОСТОЙ тестовый набор для отправки в IBM для решения этой проблемы.

Я подумал, что было бы просто сгенерировать тестовый пример JUnit или небольшое основное приложение, которое выполняло вызовы, и показать, что вызов MQ никогда не возвращался. Я решил использовать службу Executor, обернуть свой вызов MQ в Callable и отправить его в службу executor с помощью Future.get() с указанным интервалом времени ожидания.

Конечно, время ожидания истекло, но приложение не умрет. Если я использую Assert.fail() или когда ловится исключение тайм-аута, этого не происходит, хотя трассировка стека исключения тайм-аута действительно печатается. Я могу убить программу только извне или вызвав System.exit(). Я бы тоже не хотел этого делать. Есть ли способ убить поток в рамках пакета java.util.concurrent?

Эта проблема предлагает решение, но с оговоркой

Пока вы не делаете бесперебойную блокировку вызовов в своей задаче

Но это именно то, что я делаю. Есть ли ЛЮБОЙ способ убить программу, которая вызывает непрерывный ввод-вывод изнутри?

1 ответ

При работе с внешним вводом-выводом обычным способом уничтожения процесса, выполняющего соединение, является закрытие сокета, подключенного к удаленному серверу.

При этом вы получите исключение ввода-вывода, но процесс прекратится, и поток из пула перестанет работать.

Другие вопросы по тегам