公众号merlinsea
线程的状态转换流程图:
线程中止需要注意的问题:当调用线程中止的方法时,如果线程后续还有代码没有执行完毕应该继续让线程执行,执行完整个run()方法体中的逻辑以后就停止运行线程。
调用线程的interrupt()改变线程的标记位来控制线程的中断
注意点:线程的执行逻辑应该先判断线程的中断标志位是否为false再执行业务逻辑代码
public class InterruptDemo implements Runnable { @Override public void run() { while (!Thread.currentThread().isInterrupted()) { //进入方法体以后就一定会执行完整个方法体的逻辑,再去判断是否中断 //业务逻辑放在while或者if的方法体中!!! System.out.println(Thread.currentThread().getName()); } } public static void main(String[] args) throws InterruptedException { Thread thread = new Thread(new InterruptDemo()); thread.start(); Thread.sleep(1000L); //调用线程的interrupt()方法会将改变线程的标记位,用于标识线程是否中断 thread.interrupt(); } }
在普通的线程中可以自己通过增加一个标记变量来实现类似interrupt的功能
核心:增加一个中断标记位,作为一个阀值控制业务逻辑是否要执行下一轮!!!
public class MyInterruptDemo implements Runnable { //中断标记位 private static volatile boolean ISINTRRUPT = false; @Override public void run() { while (!ISINTRRUPT) { //业务逻辑 System.out.println(Thread.currentThread().getName()); } } public static void main(String[] args) throws InterruptedException { Thread thread = new Thread(new MyInterruptDemo()); thread.start(); Thread.sleep(1000L); //修改中断标记位 ISINTRRUPT = !ISINTRRUPT; } }
vip算法班永久学习班: 800元/人
周一、周三、周五:8:30-9:30,周六、周日:10:30-11:30
报名方式:通过公众号导航栏的刷题群即可联系到我的微信号
vip永久班算法训练营
奔跑的小梁,公众号:梁霖编程工具库算法训练营快来参加吧~