0

我正在尝试构建一个简单的测试用例以发送给 IBM 以尝试解决此问题

我认为创建一个 JUnit 测试用例或一个小的主应用程序进行调用并显示 MQ 调用从未返回是很简单的。我想我会使用 Executor 服务,将我的 MQ 调用包装在 Callable 中,然后使用 Future.get() 将其提交给 executor 服务,并指定超时间隔。

可以肯定的是,调用超时,但应用程序不会死掉。如果我使用 Assert.fail() 或者当超时异常被捕获时,它不会发生,尽管超时异常的堆栈跟踪确实会打印出来。我只能在外部或通过调用 System.exit() 来终止程序。我也不想这样做。有没有办法在 java.util.concurrent 包的框架内杀死线程?

这个问题提供了一个解决方案,但需要注意的是

只要您不在任务中进行不间断的阻塞调用

但这正是我正在做的。有没有办法杀死一个从内部调用不间断 I/O 的程序?

4

1 回答 1

0

在处理外部 IO 时,杀死执行连接的进程的常用方法是关闭连接到远程服务器的套接字。

这样做你会得到一个 IO 异常,但进程将终止,池中的线程将停止工作。

于 2014-06-16T09:17:54.867 回答