t.interrupt() t.isInterrupted() Thread.interrupted()区别
1.t.interrupt()设置中断标志位,是实例的方法,线程A持有线程B的句柄,那么线程A可以调用线程B的interrupt(),线程A也可以设置自己的线程为中断状态
2.t.isInterrupted() 判断线程t的中断标志位。如果已经中断返回true,如果未中断,返回false,并且不会恢复为false。作为实例的方法是因为线程A可以去获取线程B的中断状态,但是只能读取,却不能也不应该去把线程B中断标志位复位。
假设线程已经被中断,调用该方法也不一定总是返回true,如果已经发生中断异常,那么中断标志位将被复位,如果调用过Thread.interrupted(),那么中断标志位将被复位
public boolean isInterrupted() {
return isInterrupted(false);
}
3.Thread.interrupted(),返回当前线程的中断标志状态,并且复位。看jdk代码得知
public static boolean interrupted() {
return currentThread().isInterrupted(true);
}