调用interrupt方法仅仅是在当前线程中打了一个停止的标记,并不是真正停止线程。
this.interrupted() :测试当前线程是否已经中断,执行后具有将状态标志清除为false的功能
isInterrupted() : 测试线程Thread对象是否已经是中断状态,但不清除状态标志。
public class InterruptDemo extends Thread{ public void run(){ super.run(); try{ for(int i =0;i< 500000;i++){ if(this.isInterrupted()){ System.out.println("run:" +InterruptDemo.interrupted()); System.out.println("已经是停止状态了!"); //throw new InterruptedException(); 代替break 解决 后面语句继续执行的问题, 即:System.out.println("我在for的下面,线程终止了"); // break; throw new InterruptedException(); } System.out.println("i="+(i+1)); } System.out.println("我在for的下面,线程终止了"); }catch(Exception e){ System.out.println("进入run方法中的catch了!!"); e.printStackTrace(); } } public static void main(String[] args) { try { InterruptDemo thread = new InterruptDemo(); thread.start(); Thread.sleep(2000); thread.interrupt(); System.out.println("thread"+thread.isInterrupted()); System.out.println("main:"+InterruptDemo.interrupted()); //Thread.currentThread().interrupt(); //System.out.println(Thread.interrupted()); ///System.out.println(Thread.interrupted()); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }