标签:定义 实现 private tor 综合 stat dex 比较 伪代码
判断的是当前线程是否处于中断状态。是类的静态方法,同时会清除线程的中断状态。
1 public static boolean interrupted() { 2 return currentThread().isInterrupted(true); 3 }
判断调用线程是否处于中断状态
例如:
public static void main(String[] args){ Thread thread = new Thread(()->{}); //定义一个线程,伪代码没有具体实现 thread.isInterrupted();//判断thread是否处于中断状态,而不是主线程是否处于中断状态 Thread.isInterrupted(); //判断主线程是否处于中断状态 }
@Override public void run() { while (!isInterrupted()) { // 执行任务... } }
说明:isInterrupted()是判断线程的中断标记是不是为true。当线程处于运行状态,并且我们需要终止它时;可以调用线程的interrupt()方法,使用线程的中断标记为true,即isInterrupted()会返回true。此时,就会退出while循环。
注意:interrupt()并不会终止处于“运行状态”的线程!它会将线程的中断标记设为true。
private volatile boolean flag= true; protected void stopTask() { flag = false; } @Override public void run() { while (flag) { // 执行任务... } }
说明:线程中有一个flag标记,它的默认值是true;并且我们提供stopTask()来设置flag标记。当我们需要终止该线程时,调用该线程的stopTask()方法就可以让线程退出while循环。
注意:将flag定义为volatile类型,是为了保证flag的可见性。即其它线程通过stopTask()修改了flag之后,本线程能看到修改后的flag的值。
@Override public void run() { try { // 1. isInterrupted()保证,只要中断标记为true就终止线程。 while (!isInterrupted()) { // 执行任务... } } catch (InterruptedException ie) { // 2. InterruptedException异常保证,当InterruptedException异常产生时,线程被终止。 } }
java多线程 interrupt(), interrupted(), isInterrupted()方法区别
标签:定义 实现 private tor 综合 stat dex 比较 伪代码
原文地址:http://www.cnblogs.com/huangyichun/p/7126851.html