Interrupt
来源:互联网 发布:linux怎么进入编辑 编辑:程序博客网 时间:2024/05/16 17:48
当线程由于被调用了sleep(), wait(), join()等方法而进入阻塞状态;若此时调用线程的interrupt()将线程的中断标记设为true。由于处于阻塞状态,中断标记会被清除,同时产生一个InterruptedException异常。将InterruptedException放在适当的位置就能终止线程。
当线程处于运行状态,并且我们需要终止它时;可以调用线程的interrupt()方法,使用线程的中断标记为true,即isInterrupted()会返回true。此时,就会退出while循环。
public void run() {
while (!isInterrupted()) {
// 执行任务...
}
}
如果线程被阻塞,它便不能核查共享变量,也就不能停止。这在许多情况下会发生,例如调用 Object.wait()、ServerSocket.accept()和DatagramSocket.receive()时,他们都可能永久的阻塞线程。如果线程被Object.wait,Thread.join和Thread.sleep三种方法之一阻塞,那么,它将接收到一个中断异常(InterruptedException),从而提早地终结被阻塞状态。因此,如果线程被上述几种方法阻塞,正确的停止线程方式是设置共享变量,并调用interrupt()(注意变量应该先设置)。如果线程没有被阻塞,这时调用interrupt()将不起作用;否则,线程就将得到异常(该线程必须事先预备好处理此状况),接着逃离阻塞状态。在任何一种情况中,最后线程都将检查共享变量然后再停止。
调用interrupted方法,第一次会返回true。然后,当前线程的中断状态被方法内部清除了。第二次调用时就会返回false。如果你刚开始一直调用isInterrupted,则会一直返回true,除非中间线程的中断状态被其他操作清除了。
- interrupt
- interrupt
- interrupt()
- interrupt
- interrupt()
- Interrupt
- Interrupt
- interrupt using
- Interrupt Binding
- INTERRUPT CONTROLLER
- interrupt.c
- Interrupt Handler
- Interrupt()详解
- Linux Interrupt
- Java interrupt
- Thread.interrupt()
- Internet interrupt
- Interrupt Transfers
- Java编程之十进制转二进制算法
- JavaScript入门(三)
- 数据结构与算法2
- es 记录
- Hyperspectral Band Selection by Multitask Sparsity Puisuit
- Interrupt
- PHP之SQL注入
- CodeForces 624C【二分图染色】
- xampp使用指南
- Hadoop浅见
- Java基础知识
- 基线问题
- AQS
- Hibernate中addEntity与Transformers.aliasToBean的区别