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

Two Phase Termination(两阶段)设计模式

    Two Phase Termination设计模式是针对任务由两个环节组成,第一个环节是处理业务相关的内容,第二个阶段是处理任务结束时的同步、释放资源等操作。在进行两阶段终结的时候,需要考虑:

  • 第二阶段终止操作必须保证线程安全。

  • 要百分百确保线程结束,假设在第二阶段出现了死循环、阻塞等异常导致无法结束。

  • 对资源的释放时间要控制在一个可控范围内。

   两阶段模式更类似于一个线程使用技巧,主要针对当线程生命周期结束时,能有机会做一些资源释放工作。

   强引用时平时使用最多的一种对象引用,当一个对象引用被关键字new实例化出来时,JVM会在堆内存中开辟一个内存区域,用于存放与该实例对应的数据结构。JVM的GC线程会在达到GC条件时尝试回收堆栈内存中的数据。强引用的特点是,只要引用到ROOT根的路径可达,无论怎么GC都不会将其释放,宁可出现JVM内存溢出。

    LRU,最近最少使用算法和Cache结合是最常见的一种Cache实现。LRU是一种数据冷热治理的思想,不经常使用数据称为冷数据,经常使用的数据称为热数据,对冷数据分配很少的资源或者提前释放,可以帮助节省更多的内存资源。

    强引用+LRU,在频繁增加大容量的强引用时,容易导致JVM内存溢出。当JVM检测到内存即将溢出,它会尝试GC软类型的引用。如果软类型的引用在操作频率超过GC的频率,那么也会导致JVM内存溢出,但是这种情况比较少。无论发生什么样的GC,弱引用都会被垃圾回收器回收,弱引用可以用来做Cache。无论是软类型的引用还是弱类型的引用,被垃圾回收器回收后,都会被存放到与之对应的引用队列中。

    Phantom Reference(幻影引用)与软引用、弱引用的不同之处:

  • Phantom Reference必须与ReferenceQueue配合使用

  • 幻影引用的get方法返回的始终是null

  • 当垃圾回收器决定回收幻影引用对象的时候,会将其插入关联的ReferenceQueue中

  • 使用幻影引用进行清理动作要比Object的finalize方法更灵活。

 一段样例代码展示两阶段设计模式,不可运行,仅供参考:

import java.io.IOException;
import java.net.Socket;public class TwoPhaseTerminationSample extends Thread{
Socket socket;@Override
public void run() {
try {
//this.chat();
}catch(Exception e) {
e.printStackTrace();
}finally {
release();
}
}private void release() {
if(socket!=null) {
try {
socket.close();
} catch (IOException e) {
if(socket!=null) {
SocketCleaningTracker.track(socket);
}
}
}
}
}
import java.io.IOException;
import java.lang.ref.PhantomReference;
import java.lang.ref.ReferenceQueue;
import java.net.Socket;public class SocketCleaningTracker {
private static final ReferenceQueue<Object> queue=new ReferenceQueue<>();static {
new Cleaner().start();
}public static void track(Socket socket) {
new Tracker(socket,queue);
}private static class Cleaner extends Thread{private Cleaner() {
super("SocketCleaningTracker");
this.setDaemon(true);
}@Override
public void run() {
for(;;) {
try {
Tracker tracker=(Tracker)queue.remove();
tracker.close();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}}private static class Tracker extends PhantomReference<Object>{
private final Socket socket;Tracker(Socket socket, ReferenceQueue<? super Object> queue){
super(socket,queue);
this.socket=socket;
}public void close() {
try {
this.socket.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}}}

相关文章:

Two Phase Termination(两阶段)设计模式

Two Phase Termination设计模式是针对任务由两个环节组成&#xff0c;第一个环节是处理业务相关的内容&#xff0c;第二个阶段是处理任务结束时的同步、释放资源等操作。在进行两阶段终结的时候&#xff0c;需要考虑&#xff1a; 第二阶段终止操作必须保证线程安全。 要百分百…...

闲人闲谈PS之四十九——PLM和SAP集成常见的问题

惯例闲话&#xff1a;天气突变&#xff0c;没想到珠三角也骤降了10几度&#xff0c;昨晚还吹风扇模式&#xff0c;早上起来一下子感觉丝丝凉意。闲人还是喜欢冬天&#xff0c;冷&#xff0c;能让人思维清晰&#xff0c;提高工作效率。趁着天气适宜&#xff0c;赶紧加班擦屁股去…...

帆软BI目录

数据导入ORACLE库 写法 SELECT * FROM (SELECT a.id ,a.expandType,a.parentId,a.displayName,a.sortIndex,LEVEL lv ,replace(sys_connect_by_path(displayName,//),//Dec-Entry_Management//,) AS 路径FROM FINE_AUTHORITY_OBJECT aSTART WITH a.id decision-directory-ro…...

(第8天)保姆级 PL/SQL Developer 安装与配置

PL/SQL Developer 安装与配置(第8天) 咱们前面分享了很多 Oracle 数据库的安装,但是还没有正式使用过 Oracle 数据库,怎么连接 Oracle 数据库?今天就来讲讲我学习中比较常用的 Oracle 数据库连接工具:PL/SQL DEVELOPER。 PL/SQL Developer 的安装和配置对于新手来说还是…...

【CSS】前端点点点加载小点样式css动画过程实现

对话的 ... 加载动画&#xff0c;直接用 CSS 就可以实现&#xff0c;样式可以自己改&#xff0c;逻辑大差不差 <div class"loading-text"><span class"dot1"></span><span class"dot2"></span><span class&quo…...

【LeetCode: 2415. 反转二叉树的奇数层 | BFS + DFS】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…...

期货股市联动(期股联动助推资本市场上扬)

期股联动——期货股市助推资本市场上扬 随着我国资本市场的不断发展&#xff0c;期货和股票这两个市场也在逐渐紧密地联系起来。期货和股票的相互作用是一种“期股联动”&#xff0c;它能够促进资本市场的上扬。 期货与股票市场 期货市场是一种标准化的场外交易市场&#xf…...

生成式AI的力量,释放RPA的无限潜能

回首即将过去的2023年&#xff0c;互联网行业似乎始终处在各种新概念的热潮激荡之中。其中&#xff0c;最引人注目的话题无疑是AI科技。自人工智能技术实现大规模突破以来&#xff0c;我们见证了一系列生成式AI的涌现。从ChatGPT到百度文心一言&#xff0c;它们纷纷登场&#x…...

【leetcode】链表总结

说明&#xff1a;本文内容来自于代码随想录 链表基本操作 https://leetcode.cn/problems/design-linked-list/ 删除节点 https://leetcode.cn/problems/remove-linked-list-elements/description/&#xff0c;删除节点&#xff0c;虚拟头节点。定义两个节点&#xff0c;分别…...

焦虑,其实是你自愿选择的

如果一个人想要焦虑&#xff0c;他可以永远焦虑下去 从上学&#xff0c;到找工作&#xff0c;从买房到结婚生娃&#xff0c;他总是可以选择用自己的头脑去过度思考未来还没有发生的事情&#xff0c;从而让自己无限焦虑下去&#xff0c;直到生命终结。 我们的生命是存在于当下…...

4G无线工业级路由器在智能制造设备互联互通中的角色

随着工业技术的不断发展和进步&#xff0c;智能制造已经成为了现代制造业的重要趋势和发展方向。而在智能制造过程中&#xff0c;设备之间的互联互通是至关重要的一环。在这个过程中&#xff0c;4G无线工业级路由器扮演着重要的角色&#xff0c;它提供了稳定可靠的网络连接&…...

gitbash下载安装

参考教程 零、下载 官网地址 2.43.0win64 链接&#xff1a;https://pan.baidu.com/s/16urs_nmky7j20-qNzUTTkg 提取码&#xff1a;7jaq 一、安装 图标组件&#xff08;Additional icons&#xff09;&#xff1a;选择是否创建桌面快捷方式&#xff1b;桌面浏览&#xff08;Win…...

系列一、Linux中安装MySQL

一、Linux中安装MySQL 1.1、下载MySQL安装包 官网&#xff1a;https://dev.mysql.com/downloads/file/?id523327 我分享的&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/188_9RnBYlWVzFb_UJH5aaQ?pwdyyds 提取码&#xff1a;yyds 1.2、上传至/opt目录 & 解压…...

开辟“护眼绿洲”,荣耀何以为师?

文 | 智能相对论 作者 | 佘凯文 俗话说&#xff0c;眼睛是心灵的窗户&#xff0c;可如今&#xff0c;人们对于这扇“窗户”的保护&#xff0c;似乎越来越不重视。 据人民日报今年发布的调查显示&#xff0c;中国眼病患病人数2.1亿&#xff0c;近视患者人数多达6亿&#xff0…...

Modbus RTU和Modbus TCP的区别 深入篇

目录 1 传输方式不同 2 硬件接口不同 3 校验码不同 4 指令内容不同 4.1 Modbus RTU 4.1.1 功能码为03&#xff0c;表示读寄存器 4.1.2 功能码为10&#xff0c;表示写多个寄存器 4.2 Modbus TCP 4.2.1 功能码为03&#xff0c;表示读寄存器 4.2.2 回复异常报文 5 传输速…...

【大数据】Doris 的集群规划和环境准备

Doris 的集群规划和环境准备 1.1 环境要求1.1 Linux 操作系统版本需求1.2 软件需求 1.2 硬件要求1.3 节点规划1.4 通信端口1.5 IP 地址绑定 Doris 作为一款开源的 MPP 架构 OLAP 数据库&#xff0c;能够运行在绝大多数主流的商用服务器上。为了能够充分运用 MPP 架构的并发优势…...

connect: Network is unreachable问题解决

第一步&#xff1a;查看ifcfg-ens33配置文件 cd /etc/sysconfig/network-scripts/ cat ifcfg-ens33 发现问题&#xff1a;GATEWAY写错成GATWAY 第二步&#xff1a;修改 vim ifcfg-ens33 第三步&#xff1a;检测是否成功 ping baidu.com 成功&#xff01;...

三层交换与DHCP

目录 一、三层交换 &#xff08;一&#xff09;基本概念 &#xff08;二&#xff09;转发原理 &#xff08;三&#xff09;ensp项目实验 二、DHCP &#xff08;一&#xff09;DHCP工作原理 1.DHCP的特点 2.工作原理 &#xff08;二&#xff09;DHCP项目实验 一、三层交…...

02markdown-学习笔记

一级标题 二级标题 三级标题 四级标题 五级标题 六级标题 换行符<br>标签 写入一段测试用的正文第二段测试文本,如果要对文本进行换行可以使用<br>标签 文本修饰符 字体为斜体的修饰&#xff0c;一对星号包含 字符为粗体&#xff0c;两对星号包含 字体为…...

UE5 动画 Sequencer-学习笔记

P2. 课程介绍 资料&#xff1a;https://www.bilibili.com/video/BV1Ag411873f?p2&vd_source707ec8983cc32e6e065d5496a7f79ee6 Sequencer不仅可以做互动动画&#xff0c;还可以导出视频与序列帧 P3-4. 界面介绍 https://www.bilibili.com/video/BV1Ag411873f?p3&spm_…...

visual studio code 好用的插件

vscode-icons Better comments 该插件对不同类型的注释会附加了不同的颜色&#xff0c;更加方便区分&#xff0c;帮助我们在代码中创建更人性化的注释。 Error Lens Error Lens插件是一款可以检测你编写的代码的语法错误&#xff0c;并且会显示出对语法错误的诊断信息…...

Redis 过期删除策略、内存回收策略、单线程理解

不知从何开始Redis的内存淘汰策略也开始被人问及&#xff0c;卷&#xff01;真的是太卷了。难不成要我们去阅读Redis源码吗&#xff0c;其实问题的答案&#xff0c;在Redis中的配置文件中全有&#xff0c;不需要你阅读源码、这个东西就是个老八股&#xff0c;估计问这个东西是想…...

oracle 如何把数据库 date 日期格式 的数据 改成 2021-01-27

如果您要将日期"27-12月-29"更改为"2021-01-27"格式&#xff0c;您可以使用Oracle的日期格式化函数和字符串替换函数来实现。 以下是一个示例SQL语句&#xff0c;将日期"27-12月-29"更改为"2021-01-27"格式&#xff1a; sql UPDATE…...

Git 使用教程(超级详细)

目录 一&#xff1a;Git二&#xff1a;SVN与Git的的区别三、安装Git四&#xff1a;常规操作五&#xff1a;远程仓库六&#xff1a;创建与合并分支七&#xff1a;bug分支八&#xff1a;多人协作九&#xff1a;git可视化工具 Git Git 是一种分布式版本控制系统&#xff0c;用于…...

动态规划习题

动态规划的核心思想是利用子问题的解来构建整个问题的解。为此&#xff0c;我们通常使用一个表格或数组来存储子问题的解&#xff0c;以便在需要时进行查找和使用。 1.最大字段和 #include <iostream> using namespace std; #define M 200000int main() {int n, a[M], d…...

安卓免Root做klipper上位机教程

软件说明&#xff1a;虚拟电脑可以在8.0以上没越狱的安卓系统中安装klipper上位机程序实现对已刷入klipper固件的3D打印控制板的控制欢迎下载安装测试&#xff0c;反馈碰到的问题。安装步骤&#xff1a;1). 在手机上打开浏览器&#xff0c;访问这个网址 http://droidvm.com/cn/…...

网络安全学习之信息泄露

一、背景以及泄露途径 通常我们会对数据进行备份&#xff0c;比如我们在发布网站的时候会对将要替换的版本进行备份。我们在对重要文件进行修改的时候我们也需要进行备份&#xff0c;如果我们对备份或缓存的文件或信息为做好管理&#xff0c;很容易就导致我们的敏感信息泄露。…...

Java智慧工地源码,智慧工地管理平台的技术架构和工作原理

智慧工地管理平台是将互联网的理念和技术引入建筑工地&#xff0c;从施工现场源头抓起&#xff0c;最大程度的收集人员、安全、环境、材料等关键业务数据&#xff0c;依托物联网、互联网&#xff0c;建立云端大数据管理平台&#xff0c;形成“端云大数据”的业务体系和新的管理…...

Nginx配合Vue的history模式

加上一行代码就行&#xff1a; try_files $uri $uri/ /index.html;...

持续集成交付CICD:Jenkins使用GitLab共享库实现基于Ansible的CD流水线部署前端应用的蓝绿发布

目录 一、实验 1.蓝绿发布准备 2.Jenkins使用GitLab共享库实现基于Ansible的CD流水线部署前端应用的蓝绿发布 二、问题 1.手动构建Jenkins前端项目CI流水线报错 2.如何优化手动构建流水线选项参数 一、实验 1.蓝绿发布准备 &#xff08;1&#xff09;环境 表1 蓝绿发布…...

开发公司没有资质有什么影响/慈溪seo

第二十届中国国际高新技术成果交易会于11月14日至18日在深圳会展中心举办&#xff0c;本届展会的主题为「坚持新发展理念&#xff0c;推动高品质发展」。开幕当天&#xff0c;SAP 全球高级副总裁、SAP 中国研究院院长李瑞成博士受邀出席「2018中国高新技术论坛」&#xff0c;探…...

有没有专门做翻译的网站/最近的重要新闻

原文地址&#xff1a;http://jason61719.blog.163.com/blog/static/11417604120106325114274/ 一、Eclipse,MyEclipse安装插件方法大全(dropins) 使用eclipse&#xff0c;最看重的还是它的插件数量比较多&#xff0c;使用起来比较方便&#xff0c;但是大多数人对eclipse的插件…...

网站建设 统一质量标准/网站怎么做

PHP获取不到SESSION信息的解决办法&#xff1a;首先检查【php.ini】&#xff0c;并查看【/var/tmp】的有读写权限&#xff1b;然后检查【php-fpm】配置文件&#xff1b;最后重启【php-fpm】。PHP获取不到SESSION信息的解决办法&#xff1a;一、检查 php.inivim /etc/php.ini检查…...

河北建设集团网站/软件制作

1. 问题描述 使用 Iris 数据集&#xff0c;在一个 figure 中绘制出右侧的 16 个子图。 分别使用花瓣长度、花瓣宽度、花萼长度和花萼宽度这四种数据&#xff0c;两两组合&#xff0c;形成散点。 找一组自己感兴趣的真实数据&#xff0c;绘制出饼图。并看看数据的项数在什么范围…...

品牌网站案例/网店推广运营策略

问题 在JDK 5之前Java语言是靠synchronized关键字保证同步的&#xff0c;这会导致有锁 锁机制存在以下问题&#xff1a; &#xff08;1&#xff09;在多线程竞争下&#xff0c;加锁、释放锁 会导致比较多的 上下文切换 和 调度延时&#xff0c;引起性能问题。 &#xff0…...

wordpress手动更新插件/百度推广的方式

我有点困惑&#xff0c;我无法使用MSVC在Windows上进行C开发设置Visual Studio Code . 网络上的所有人都说他们对设置和使用一切都很容易感到高兴&#xff0c;但我找不到任何简单的指南;他们中的大多数只是跳过设置部分&#xff0c;并显示一切有效&#xff0c;包括代码完成/智能…...