中断机制小总结
方法介绍
- public void interrupt()
- 实例方法 Just to set the interrupt flag
- 实例方法仅仅是设置线程的中断状态为true,发起一个协商而不会立刻停止线程
- public static boolean interrupted()
- 静态方法 Thread.interrupted();
- 判断线程是否被中断并清除当前中断状态(做了两件事情)
- 1.返回当前线程的中断状态,测试当前线程是否已被中断
- 2.将当前线程的中断状态清零并重新设置为false,清除线程的中断状态
- 3.这个方法有点不好理解在于如果连续两次调用此方法,则第二次返回false,因为连续调用两次的结果可能不一样
- public boolean isInterrupted()
- 实例方法
- 判断当前线程是否被中断(通过检查中断标志位)
public boolean isInterrupted() 和 public void interrupt() 的区别
Thread.interrupted();//静态方法
Thread.currentThread().isInterrupted();//实例方法
/**
* Tests if some Thread has been interrupted. The interrupted state
* is reset or not based on the value of ClearInterrupted that is
* passed.
*/
private native boolean isInterrupted(boolean ClearInterrupted);
上面isInterrupted 方法清晰的表达了“中断状态将会根据传入的ClearInterrupted参数值确定是否重置”
从上图看出静态方法和实例方法 底层都调的isInterrupted(boolean ClearInterrupted)方法 只不过一个传的是false 不需要清理打断状态 一个传的是true 需要清理打断状态