interrupt 停止线程
Posted ljy-skill
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了interrupt 停止线程相关的知识,希望对你有一定的参考价值。
该方法只是给线程设置了一个停止的标记 并不是真正的立即停止线程
interrupted() 测试当前线程是否已经中断
isInterrupted() 测试线程是否已经中断
停止线程的方法:
1.异常法 (相当于return出去) package entity.thread; public class Mythread extends Thread @Override public void run() super.run(); try for(int i=0;i<500000;i++) if(this.interrupted()) System.out.println("是停止状态了。。。"); throw new InterruptedException(); System.out.println("i=" + (i+1)); System.out.println("我在for下面"); catch (InterruptedException e) System.out.println("进入异常方法了线程终止"); e.printStackTrace(); public static void main(String[] args) throws InterruptedException try Mythread mh = new Mythread(); mh.start(); mh.sleep(2000); mh.interrupt(); catch (Exception e) System.out.println("main catch"); e.printStackTrace(); System.out.println("end"); 打印结果: i=223322 i=223323 end 是停止状态了。。。 进入异常方法了线程终止 java.lang.InterruptedException at entity.thread.Mythread.run(Mythread.java:12) 2.在沉睡中被停止 (程序会直接抛异常) package entity.thread; public class Mythread2 extends Thread @Override public void run() super.run(); try System.out.println("run begin"); Thread.sleep(200000); System.out.println("run end"); catch (InterruptedException e) System.out.println("在沉睡中被终止! 进入catch!"+ this.isInterrupted()); e.printStackTrace(); public static void main(String[] args) try Mythread2 mythread2 = new Mythread2(); mythread2.start(); mythread2.sleep(200); mythread2.interrupt(); catch (InterruptedException e) System.out.println("main catch"); e.printStackTrace(); System.out.println("end"); 执行结果 run begin end 在沉睡中被终止! 进入catch!false java.lang.InterruptedException: sleep interrupted at java.lang.Thread.sleep(Native Method) at entity.thread.Mythread2.run(Mythread2.java:10)
3.暴力停止 stop 方法 已经过时不建议使用并且会存在问题
以上是关于interrupt 停止线程的主要内容,如果未能解决你的问题,请参考以下文章
java多线程技术: interrupt() 中断线程, 优雅停止线程及原理