2014-06-09 62 views
0

我想建立一個簡單的測試用例來發送給IBM,試圖解決this issue如何殺死提交的贖回做uninterrupible IO不會返回

我認爲這將是簡單的蠱惑一個JUnit測試用例或一個主要的應用程序,它會調用並顯示MQ調用從未返回。我認爲我會使用Executor服務,將我的MQ調用包裝在Callable中,並使用Future.get()以指定的超時間隔將其提交給執行程序服務。

可以肯定的是,調用超時,但應用程序不會死亡。如果我使用Assert.fail()或捕獲超時異常,它不會發生,儘管超時異常的堆棧跟蹤會打印。我只能通過外部或通過調用System.exit()來殺死程序。我寧願不做。有沒有辦法在java.util.concurrent包的框架內殺死線程?

This issue提供了一個解決方案,但需要提醒的

只要你不要在你的任務

使不間斷阻塞調用但是,這是我在做什麼。有沒有辦法殺死一個能夠從內部調用不間斷I/O的程序?

+0

你認爲什麼I/O是不間斷的? I/O操作可能會中斷,但它們會以IOException而不是InterruptedException來表示中斷。 – Raedwald

+0

@Rededwald - 對Websphere MQ的異步調用。在我的第一個鏈接。閱讀關於java.util.concurrent.ExecutorService.shutdownNow()的文檔。他們特別提到不能被打斷的IO。 –

回答

0

當處理外部IO時,通常殺死連接進程的方法是關閉連接到遠端服務器的套接字。

這樣做會得到一個IO異常,但進程將終止並且池中的線程將停止工作。