在我的應用程序中,每個請求都有自己的線程。我使用JMX/JConsole來監視它們,測量已用時間。如果請求需要太多時間,我想通過中斷底層線程來停止它。 在我從JConsole調用的方法中,遍歷線程列表並在正確的實例上調用interrupt()。
然而,簡單地調用線程實例上的interrupt()方法只會設置一個標誌,所以我也需要拋出一個InterruptedException。 但是這個InterruptedException將應用於currentThread,而不是我實際上想要停止的線程。任何提示如何關閉標記的線程?如何關閉另一個線程?
while (iterator.hasNext()) {
RequestHolder rh = iterator.next();
if (rh.getThread().getId() == threadId) {
rh.getThread().interrupt();
if(rh.getThread().isInterrupted()){
throw new InterruptedException();
}
}
}
只是要注意 - 一些阻塞的第三方函數可以包裝InterputException在其他一些,如IOException左右(軸這樣做)。所以總是檢查是否中斷。 – JIV 2013-05-13 14:22:21