这恰恰是您不应该做的
InterruptedException。从
InterruptedException本质上来说,An
是对该线程终止的礼貌请求。该线程应清理并尽快退出。
IBM对此发表了一篇很好的文章:http
:
//www.ibm.com/developerworks/java/library/j-jtp05236.html
这是我会做的:
// Run while not interrupted.while(!(Thread.interrupted()){ try { // Do whatever here. } catch(InterruptedException e) { // This will cause the current thread's interrupt flag to be set. Thread.currentThread().interrupt(); }}// Perform cleanup and exit thread.这样,这样做的好处是:如果在阻塞方法中线程被中断,则不会设置中断位,
InterruptedException而是抛出an
。如果您的线程在没有阻塞方法的情况下被中断,则将设置被中断的位,并且不会引发异常。因此,通过调用
interrupt()在异常上设置标志,两种情况都被规范化为第一种情况,然后由循环条件检查。
另外,这还使您可以通过简单地中断线程来停止线程,而无需发明自己的机制或接口来设置一些布尔标志来执行完全相同的操作。



