当前位置: 首页 > wzjs >正文

学校网站建设关键技术网站开发要学什么

学校网站建设关键技术,网站开发要学什么,深圳效果图公司排名,wordpress关键词添加两阶段终止模式 当某些线程正在运行时,如何去正确终止线程,如果直接强制终止线程(如调用 Thread.stop())会带来以下问题: 资源未释放:线程可能持有锁、打开文件或网络连接未关闭。数据不一致:线…

两阶段终止模式


当某些线程正在运行时,如何去正确终止线程,如果直接强制终止线程(如调用 Thread.stop())会带来以下问题:

  • 资源未释放:线程可能持有锁、打开文件或网络连接未关闭。
  • 数据不一致:线程可能正在修改共享数据,突然终止会导致数据损坏。
  • 不可控性:无法保证线程在安全点终止。

两阶段终止模式(Two-Phase Termination Pattern)是一种多线程编程中安全终止线程的设计模式。它的核心思想是:在终止线程前,先发出终止请求(第一阶段),然后线程在完成必要清理工作后再真正终止(第二阶段)。这种模式避免了直接强制终止线程导致的资源泄露、数据不一致等问题

简单来说就是在一个线程T1中如何优雅的终止线程T2,给T2一个料理后事的机会


两阶段终止的实现步骤

第一阶段:发出终止请求

  • 设置一个终止标志位,通知线程需要终止。
  • 如果线程处于阻塞状态(如 sleep()wait()),需要通过**中断(Interrupt)**唤醒它。

第二阶段:线程响应终止请求

  1. 线程检测到终止标志位或中断信号后,停止接受新任务
  2. 执行清理工作(如释放锁、关闭文件)。
  3. 安全终止线程

如果你依然认为难以理解,可以用狼人杀的角度来解释一下:

使用Thread.stop()等强制终止线程,就是夜间被狼刀了,而两阶段终止模式是白天被票决,你还有发表遗言的机会


代码实现

这里启用了一个监控线程,在监控线程中用了一个死循环,并且用线程的中断状态作为标志位,如果线程在运行时被打断可直接进入第二阶段,若是线程在睡眠中被打断,在捕获InterruptedException后,重新设置中断状态,以便标志位终止线程

public class TwoPhase {/*** 两阶段终止模式:*  在一个线程T1中如何优雅的终止线程T2,给T2一个料理后事的机会*/private Thread monitor;// 启动监控线程public void start(){monitor = new Thread(() -> {while (true){Thread current = Thread.currentThread();if (current.isInterrupted()){ // 判断线程中断状态System.err.println("线程被打断,料理后事中.............");break;}try {Thread.sleep(2000);System.out.println("记录线程日志--------------------");} catch (InterruptedException e) {e.printStackTrace();System.err.println("------------->重置线程打断标识");current.interrupt();}}System.out.println("--------------线程已终止-----------------");});monitor.start();}// 终止监控线程public void stop(){monitor.interrupt();}
}

此时可以创建一个测试类,启动监控线程,等待几秒之后用stop终止该线程

public class TwoPhaseTest {public static void main(String[] args) throws InterruptedException {TwoPhase twoPhase = new TwoPhase();twoPhase.start();Thread.sleep(7000);twoPhase.stop();}
}

控制台会依次输出信息:

记录线程日志--------------------
记录线程日志--------------------
记录线程日志--------------------
java.lang.InterruptedException: sleep interruptedat java.base/java.lang.Thread.sleep(Native Method)at juc2.TwoPhase.lambda$start$0(TwoPhase.java:20)at java.base/java.lang.Thread.run(Thread.java:834)
------------->重置线程打断标识
线程被打断,料理后事中.............
--------------线程已终止-----------------

大致流程图:

✅ 是
❎ 否
🚫 无异常
⚠️ 有异常
🔁 while true
❓ 是否被打断?
🛠️ 料理后事
⏹️ 结束循环
💤 sleep(2000)
📝 执行监控记录
⚡ 设置打断标记
http://www.dtcms.com/wzjs/795943.html

相关文章:

  • 网站建设流程书籍商城网站设计
  • 苏州市住房和城乡建设局官方网站东莞网站建设都找菲凡网络
  • 网站做搜索要用数据库吗高明网站设计多少钱
  • 加猛挣钱免费做网站软件求做图的网站
  • 网站维护费计入什么科目wordpress搜索框下拉
  • 网站建设的淘宝模板山东平台网站建设制作
  • 网站上传教程建设网站用什么好
  • 广州建设网站方案北京网站关键词优化
  • 模板网站哪个平台好建设电子商务网站的方法有
  • 做网站公司济南临淄信息港人才招聘
  • 网站上的用户注册怎么做的关键词网站建设推广
  • 网站公司可以做英文网吗贵阳微信小程序制作开发
  • 金阊企业建设网站公司外贸公司的简介100字
  • 虚拟主机 多个网站微信登录入口官网
  • 南宁本地有几家网站开发怎样查找网站开发者
  • 郑州网站seo优化公司做介绍美食网站的菜单的
  • 制作一个链接网站网站后台制作用的软件
  • 德胜门网站建设大气网站特点
  • 免费制作自己的微网站ui设计公司排行榜
  • 做dnf钓鱼网站安徽网站建设服务
  • 网站建设管理条例网站换空间怎么换
  • 网站设计基本原则wordpress自媒体模版
  • 郑州网站制作的公司哪家好小程序app定制开发系统报价
  • 米定制网的网站是那个公司做励销云
  • 平阳县城乡规划建设局网站南昌室内设计学校
  • 河北建设信息网站网站分站如何做
  • 怎样用dw做 网站首页手机wap网站开发教程
  • 张店网站建设定制河北中尊建设工程有限公司官方网站
  • 网站的产品上传图片中国建设银行互联网网站
  • 公司换网站换域名 备案我想做网络推广