栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

拓展:两阶段终止设计模式

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

拓展:两阶段终止设计模式

文章目录
  • 一、思路
  • 二、 利用 isInterrupted
  • 三、 利用停止标记

一、思路

二、 利用 isInterrupted

interrupt 可以打断正在执行的线程,无论这个线程是在 sleep,wait,还是正常运行

class TPTInterrupt {
	 private Thread thread;
	 public void start(){
		 thread = new Thread(() -> {
			 while(true) {
				 Thread current = Thread.currentThread();
				 if(current.isInterrupted()) {
				 log.debug("料理后事");
				 break;
		 	 }
			 try {
				 Thread.sleep(1000);
				 log.debug("将结果保存");
			 } catch (InterruptedException e) {
			 	 current.interrupt();
			 }
			 // 执行监控操作 
		 }
		},"监控线程");
		 thread.start();
	}
	public void stop() {
		 thread.interrupt();
	}
}

调用

TPTInterrupt t = new TPTInterrupt();
t.start();
Thread.sleep(3500);
log.debug("stop");
t.stop();

结果

11:49:42.915 c.TwoPhaseTermination [监控线程] - 将结果保存
11:49:43.919 c.TwoPhaseTermination [监控线程] - 将结果保存
11:49:44.919 c.TwoPhaseTermination [监控线程] - 将结果保存
11:49:45.413 c.TestTwoPhaseTermination [main] - stop 
11:49:45.413 c.TwoPhaseTermination [监控线程] - 料理后事
三、 利用停止标记
// 停止标记用 volatile 是为了保证该变量在多个线程之间的可见性
// 我们的例子中,即主线程把它修改为 true 对 t1 线程可见
class TPTVolatile {
	 private Thread thread;
	 private volatile boolean stop = false;
	 public void start(){
		 thread = new Thread(() -> {
			 while(true) {
				 Thread current = Thread.currentThread();
				 if(stop) {
				 log.debug("料理后事");
				 break;
			 }
			 try {
				 Thread.sleep(1000);
				 log.debug("将结果保存");
			 } catch (InterruptedException e) {
			 	//处理异常
			 }
			 // 执行监控操作
			 }
		 },"监控线程");
		 thread.start();
	 }
	 public void stop() {
		 stop = true;
		 thread.interrupt();
	 }
}

调用

TPTVolatile t = new TPTVolatile();
t.start();
Thread.sleep(3500);
log.debug("stop");
t.stop();

结果

11:54:52.003 c.TPTVolatile [监控线程] - 将结果保存
11:54:53.006 c.TPTVolatile [监控线程] - 将结果保存
11:54:54.007 c.TPTVolatile [监控线程] - 将结果保存
11:54:54.502 c.TestTwoPhaseTermination [main] - stop 
11:54:54.502 c.TPTVolatile [监控线程] - 料理后事
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/293214.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号