Java问题:据我所知,有两种方法可以检查线程内部是否接收到中断信号Thread.interrupted()
和Thread.isInterrupted()
,它们之间的唯一区别是前者会重置内部中断标志。
到目前为止,我一直使用Thread.isInterrupted()
,并且从未遇到任何问题。再说一次,我见过的大多数教程都建议使用Thread.interrupted()
。有什么具体原因吗?
最佳答案
interrupted()
是static
并检查当前线程。 isInterrupted()
是一个实例方法,用于检查调用它的Thread
对象。
一个常见的错误是在实例上调用静态方法。
Thread myThread = ...;
if (myThread.interrupted()) {} // WRONG! This might not be checking myThread.
if (myThread.isInterrupted()) {} // Right!
另一个区别是
interrupted()
也清除了当前线程的状态。换句话说,如果您连续两次调用它,并且两次调用之间的线程都没有中断,那么即使第一个调用返回了false
,第二个调用也将返回true
。Javadocs会告诉您类似这样的重要信息;经常使用它们!