interrupt //只是对线程进行一个标记 并不是真的退出
Thread.interrupted() //线程上面的静态方法
MyThreadSleep myThreadSleep = new MyThreadSleep();
myThreadSleep.start();
myThreadSleep.interrupt(); //线程上面
interrupted ()
判断当前线程是不是仍然继续运行的方法 (静态方法) 有清除状态的功能
isInterrupted ()
测试线程是不是已经中断 (非静态方法) 具有清除状态的功能
用户想要停止线程的时候 需要进行配对应的处理才可以
1.第一种方式
调用线程的地方调用interrupt() ,进行标记 然后使用 isInterrupt() 先进行判断,抛出异常然后进行捕获,进行处理。
public class MyThread4 extends Thread { @Override public void run() { super.run(); for (int i = 0; i < 500000; i++) { if (this.isInterrupted()){ System.out.println("已经是停止状态了我要退出了" ); break; } System.out.println("i="+(i+1)); } System.out.println("虽然线程已经断了我还在继续执行"); } }
第二种方式
2.当线程中有sleep 方法的时候, 调用的地方使用interrupt() 的时候会抛出异常,进行捕获可以进行操作
public class MyThreadSleep extends Thread { @Override public void run() { super.run(); for (int i = 0; i < 30000; i++) { System.out.println("i = "+(i+1)); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); System.out.println("线程在sleep 发生了异常退出"); break; } } } }