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

设计模式之两阶段终止模式

文章目录

    • 1. 简介
  • 2. 常见思路
    • 3. 代码实战

1. 简介

两阶段终止模式(Two-Phase Termination Pattern)是一种软件设计模式,用于管理线程或进程的生命周期。它包括两个阶段:第一阶段是准备阶段,该阶段用于准备线程或进程的停止;第二阶段是停止阶段,该阶段用于执行实际的停止操作。这种模式的主要目的是确保线程或进程在停止之前完成必要的清理和资源释放操作,以避免出现资源泄漏和数据损坏等问题。两阶段终止模式是一种常见的并发编程模式,广泛应用于Java和其他编程语言中。

简单理解就是在一个线程T1中如何“优雅”终止线程T2,这里的优雅就是给T2一个料理后事的机会

2. 常见思路

在一个线程中终止另一个线程的方法场景的有两种
(1) 使用线程对象的Stop()方法停止线程:这中方法是不可行的,stop方法没有真正杀死线程,如果这时线程锁住了共享资源,那么当它被杀死后就没有机会释放这些锁,那么其它线程将永远无法获取锁

(2)使用System.exit(int)方法停止线程:目的仅是停止一个线程,但这中做法会让整个程序都停止

于是就有了两阶段设计模式,具体的运行流程如下:

在这里插入图片描述

3. 代码实战

import lombok.extern.slf4j.Slf4j;import java.lang.invoke.MethodHandle;
import java.lang.invoke.MethodType;public class Main {public static void main(String[] args) throws InterruptedException {TwoPhaseTermination twoPhaseTermination=new TwoPhaseTermination();twoPhaseTermination.start();Thread.sleep(3500);twoPhaseTermination.stop();}
}
class TwoPhaseTermination{private Thread monitor;//启动监控线程public void stop(){monitor.interrupt();}//停止监控线程public void start(){monitor=new Thread(()->{while(true){Thread thread = Thread.currentThread();if(thread.isInterrupted()){System.out.println("料理后事");break;}try {Thread.sleep(1000);System.out.println("执行监控记录");} catch (InterruptedException e) {e.printStackTrace();thread.interrupt();}}});monitor.start();}}
http://www.lryc.cn/news/218412.html

相关文章:

  • Dubbo捕获自定义异常
  • Leetcode刷题详解——求根节点到叶节点数字之和
  • emq集群配置nginx做负载均衡
  • 【JAVA学习笔记】60 - 坦克大战1.0-绘图坐标体系、事件处理机制
  • Android13 安装谷歌GMS导致打开蓝牙失败解决方法
  • 独创改进 | RT-DETR 引入双向级联特征融合结构 RepBi-PAN | 附手绘结构图原图
  • Ubuntu下安装vscode,并解决终端打不开vscode的问题
  • Spring Boot Actuator 漏洞利用
  • acwing算法基础之数据结构--trie算法
  • ES from+size>10000报错
  • (04)Mycat实现分库
  • DeepSORT多目标跟踪——算法流程与源码解析
  • C++查漏补缺与新标准(C++20,C++17,C++11)02 C++快速回顾(二)
  • 红米K40功能介绍
  • 壹[1],Opencv常用结构
  • Linux常用指令(一)——目录操作
  • 前端基础之jQuery
  • 【基于HTML5的网页设计及应用】——实现个人简历表格和伪类选择器应用
  • 思考(九十二):DBProxy实现多级存储和事务处理
  • 新手入门Python一定要看的八个超实用建议!
  • Centos 7.x上利用certbot申请Let‘s Encrypt的SSH证书(HTTPS证书)
  • 采用springboot、avue框架开发的:大型医院绩效考核系统成品源码
  • 时序分解 | Matlab实现FEEMD快速集合经验模态分解时间序列信号分解
  • 自学SLAM(6)相机与图像实践:OpenCV处理图像与图像拼接(点云)
  • 伊朗网络间谍组织针对中东金融和政府部门
  • 基于51单片机土壤湿度检测及自动浇花系统仿真(带时间显示)
  • typeScript基础使用与进阶
  • 云智慧联合北航提出智能运维(AIOps)大语言模型及评测基准
  • 高效处理异常值的算法:One-class SVM模型的自动化方案
  • Docker DeskTop安装与启动(Windows版本)