网站首页 > 精选教程 正文
两阶段终止线程的流程图
流程解析:
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("t1线程被终止!!!");
break;
}
num = num + 1;
System.out.println("t1线程处理业务,num = "+num);
try {
Thread.sleep(1000); //t1线程睡眠一秒钟
} catch (InterruptedException e) {
//进入异常的时候会重置打断标记,所以这里要重新设置打断标记
Thread.currentThread().interrupt();
e.printStackTrace();
}
}
},"t1") ;
t1.start(); //主线程睡眠5秒钟
Thread.sleep(5000); //主线程打断t1线程的执行
t1.interrupt();
}
}
执行结果:
t1线程处理业务,num = 1
t1线程处理业务,num = 2
t1线程处理业务,num = 3
t1线程处理业务,num = 4
t1线程处理业务,num = 5
java.lang.InterruptedException: sleep interrupted
at java.lang.Thread.sleep(Native Method)
t1线程被终止!!!
at pro01.Test01.lambda$0(Test01.java:17)
at java.lang.Thread.run(Thread.java:745)
代码完整截图:
结果截图:
- 上一篇: 面试官:说说Java线程的生命周期
- 下一篇: 面试必问:Java中如何停止线程的方法
猜你喜欢
- 2024-11-23 线程生命周期
- 2024-11-23 线程同步synchronized(不同步的问题、队列与锁),死锁产生和解决
- 2024-11-23 面试突击31:什么是守护线程?它和用户线程有什么区别?
- 2024-11-23 Java之TimeUnit的使用
- 2024-11-23 每日分享- NodeJS 程序中实现线程睡眠
- 2024-11-23 Java 17 多线程中的守护线程
- 2024-11-23 美团面试真题之一个线程OOM,进程里的其他线程还能运行吗?
- 2024-11-23 Java多线程-线程中断interrupt
- 2024-11-23 C++ 让线程休眠特定时间
- 2024-11-23 什么是线程死锁?形成条件是什么?如何避免?
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- nginx反向代理 (57)
- nginx日志 (56)
- nginx限制ip访问 (62)
- mac安装nginx (55)
- java和mysql (59)
- java中final (62)
- win10安装java (72)
- java启动参数 (64)
- java链表反转 (64)
- 字符串反转java (72)
- java逻辑运算符 (59)
- java 请求url (65)
- java信号量 (57)
- java定义枚举 (59)
- java字符串压缩 (56)
- java中的反射 (59)
- java 三维数组 (55)
- java插入排序 (68)
- java线程的状态 (62)
- java异步调用 (55)
- java中的异常处理 (62)
- java锁机制 (54)
- java静态内部类 (55)
- java怎么添加图片 (60)
- java 权限框架 (55)
本文暂时没有评论,来添加一个吧(●'◡'●)