0

この問題を解決するために IBM に送信する SIMPLE テスト ケースを作成しようとしています。

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 に答える