JAVA线程的中断
2017-05-20 19:02
288 查看
1.中断状态是什么?
每个线程都有一个boolean类型的中断状态,当中断线程时,这个线程的中断状态将被设置成true。但是,这并不意为着线程将会马上终止–中断操作并不会真正的中断一个正在运行的线程,而只是发出中断请求,然后线程在下一个合适的时刻中断自己(取消点)。2.boolean interrupt() 请求中断
interrupt()方法会将调用该方法的线程的中断状态设置为true。如果线程在调用 Object 类的 wait()、wait(long) 或 wait(long, int) 方法,或者该类的 join()、join(long)、join(long, int)、sleep(long) 或 sleep(long, int) 方法过程中受阻,则其中断状态将被清除,它还将收到一个 InterruptedException。—-即,当线程在调用上述方法时,接受到中断请求之后,这些方法将抛出一个InterruptedException异常告诉方法调用者,有‘人’尝试中断我,你应该对此作出反应。在这之前,它将把中断状态设置为false(阻塞操作将会被取消,但线程不会被中断)。
//源码 public void interrupt() { //检查当前线程是否有权限中断目标线程 if (this != Thread.currentThread()) checkAccess(); synchronized (blockerLock) { Interruptible b = blocker; if (b != null) { interrupt0(); // Just to set the interrupt flag b.interrupt(this);//推断该方法用于真正中断一个线程 return; } } interrupt0(); }
3.boolean isInterrupted() 返回中断状态
返回调用线程的中断状态//源码 public boolean isInterrupted() { return isInterrupted(false); }
/** * 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);
4.static boolean interrupted() 查询线程的中断状态,并清除其中断状态
测试当前线程是否已经中断。线程的中断状态 由该方法清除。换句话说,如果连续两次调用该方法,则第二次调用将返回 false(在第一次调用已清除了其中断状态之后,且第二次调用检验完中断状态前,当前线程再次中断的情况除外)。由于interrupted()方法会清除线程的中断状态,所以对于调用该方法返回true的线程应该格外小心—-你应该处理这个中断状态:抛出一个InterruptedException或者调用当前线程的interrupt()方法使它重新处于中断状态,而不是忽视这个信息。
public static boolean interrupted() { return currentThread().isInterrupted(true); }
相关文章推荐
- 中断Java线程
- 正确中断java线程
- 【转载】Java怎样中断一个运行中的线程
- Java怎样中断一个运行中的线程(2)
- Java怎样中断一个运行中的线程(2)
- 中断JAVA线程
- 如何中断线程in Java
- Java中断线程
- Java怎样中断一个运行中的线程(3)
- Java怎样中断一个运行中的线程(3)
- 中断JAVA线程
- Java怎样中断一个运行中的线程(1)
- Java怎样中断一个运行中的线程
- Java 可中断线程
- 【转载】Java如何中断一个正在运行的线程
- JAVA中断线程的方法
- 正确中断java线程
- JAVA里的线程中断
- Java怎样中断一个运行中的线程(1)
- Java怎样中断一个运行中的线程