在我的应用程序中,每个请求都有自己的线程。我使用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