JAVA和Nginx 教程大全

网站首页 > 精选教程 正文

java 两阶段终止线程模式

wys521 2024-11-23 23:45:11 精选教程 27 ℃ 0 评论

两阶段终止线程的流程图

流程解析:

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)

代码完整截图:

结果截图:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表