> 设计
java终止线程方法(java线程停止的几种方法)
导语:java 两阶段终止线程模式
两阶段终止线程的流程图
流程解析:
1、假设有一个监控线程t1,要一直通过循环来监控程序;
2、t1线程每次while循环的时候,判断一下自己的打断标记,如果是true,说明是要终止运行,那么料理后事终止t1线程;
3、如果打断标记为false,那么睡眠2秒钟,如果这个时候有其它线程调用了t1.interrupt,那么t1线程进入异常,并重新设置打断标记为true
4、如果睡眠的时候没有异常,那么t1线程醒来后执行逻辑代码,如果在执行逻辑代码的时候,有其它线程调用了t1.interrupt,我们不需要做任何处理,应该打断标记不会重置为false;
以下是两阶段终止线程的代码:
package pro01;public class Test01 {private static int num;public static void main(String[] args) throws Exception{Thread t1 = new Thread( ()-> {while (true) {if(Thread.currentThread().isInterrupted()) {System.out.println();break;}num = num + 1;System.out.println(+num);try {Thread.sleep(1000);//t1线程睡眠一秒钟} catch (InterruptedException e) {//进入异常的时候会重置打断标记,所以这里要重新设置打断标记Thread.currentThread().interrupt();e.printStackTrace();}}},) ;t1.start();//主线程睡眠5秒钟Thread.sleep(5000);//主线程打断t1线程的执行t1.interrupt();}}执行结果:t1线程处理业务,num = 1t1线程处理业务,num = 2t1线程处理业务,num = 3t1线程处理业务,num = 4t1线程处理业务,num = 5java.lang.InterruptedException: sleep interruptedat java.lang.Thread.sleep(Native Method)t1线程被终止!!!at pro01.Test01.lambda$0(Test01.java:17)at java.lang.Thread.run(Thread.java:745)
代码完整截图:
结果截图:
本文内容由快快网络小茜创作整理编辑!