线程中断有 3 种方法
- public void Thread.interrupt() // 中断线程
- public boolean Thread.isInterrupted() // 判断是否被中断
- public static boolean Thread.interrupted() // 判断是否被中断, 并清除当前中断状态
什么是线程中断呢?
如果不了解 Java 的中断机制, 这样的一种解释极容易造成误解, 认为调用了线程的 interrupt 方法就一定会中断线程.
其实, Java 的中断是一种协作机制. 也就是说调用线程对象的 interrupt 方法并不一定就中断了正在运行的线程, 它只是要求线程自己在合适的时机中断自己. 每个线程都有一个 boolean 的中断状态 (不一定就是对象的属性, 事实上, 该状态也确实不是 Thread 的字段),interrupt 方法仅仅只是将该状态置为 true. 对于非阻塞中的线程, 只是改变了中断状态, 即 Thread.isInterrupted() 将返回 true, 并不会使程序停止;
举例:
- public void run(){
- // 线程 t1
- while(true){
- Thread.yield();
- }
- }
- t1.interrupt();
这样使线程 t1 中断, 是不会有效果的, 只是更改了中断状态位.
如果希望非常优雅地终止这个线程, 就该这样做
- public void run(){
- while(true)
- {
- if(Thread.currentThread().isInterrupted()){
- System.out.println("Interruted!");
- break;
- }
- Thread.yield();
- }
- }
使用中断, 就对数据一致性有了一定的保证.
来源: http://www.bubuko.com/infodetail-3302672.html