首先你要知道JAVA 对 中断的设计哲学。
JAVA的中断设计 是响应性的 也就是外部通知
但有两种响应方式也就是 检查是否存在外部通知的方式
1:public static boolean interrupted() {
return currentThread().isInterrupted(true);
}
检查完之后 立即重置中断状态 也就是 if(Thread.interrupted) 之后 这个线程的中断状态就会重新变回false
2:public boolean isInterrupted() {
return isInterrupted(false);
} 不重置 一直都是true 。
就如你提的 catch(InterruptException ) 就证明 有机制响应了此中断 这是操作系统方面的 例如 sleep() ,wait()。 那么为什么要重置? 是为了支持两种模式 就是如果此处中断是我预想到的 if(xxxx) 那么就处理 如果不是else 那么就预防状态被清除模式 或者说 支持下次中断响应。
JAVA的中断设计 是响应性的 也就是外部通知
但有两种响应方式也就是 检查是否存在外部通知的方式
1:public static boolean interrupted() {
return currentThread().isInterrupted(true);
}
检查完之后 立即重置中断状态 也就是 if(Thread.interrupted) 之后 这个线程的中断状态就会重新变回false
2:public boolean isInterrupted() {
return isInterrupted(false);
} 不重置 一直都是true 。
就如你提的 catch(InterruptException ) 就证明 有机制响应了此中断 这是操作系统方面的 例如 sleep() ,wait()。 那么为什么要重置? 是为了支持两种模式 就是如果此处中断是我预想到的 if(xxxx) 那么就处理 如果不是else 那么就预防状态被清除模式 或者说 支持下次中断响应。