addShutdownHook的用处(转)

Runtime.getRuntime().addShutdownHook(shutdownHook);

   这个方法的含义说明:
       这个方法的意思就是在jvm中增加一个关闭的钩子,当jvm关闭的时候,会执行系统中已经设置的所有通过方法addShutdownHook添加的钩子,当系统执行完这些钩子后,jvm才会关闭。所以这些钩子可以在jvm关闭的时候进行内存清理、对象销毁等操作。
package cn.cmcc.test;

public class ShutDownTest {
	 /**
	  * @param args
	  */
	 public static void main(String[] args) {
	  // 定义线程1
	  Thread thread1 = new Thread() {
	   public void run() {
	    System.out.println("thread1...");
	   }
	  };
	  
	  // 定义线程2
	  Thread thread2 = new Thread() {
	   public void run() {
	    System.out.println("thread2...");
	   }
	  };
	  // 定义关闭线程
	  Thread shutdownThread = new Thread() {
	   public void run() {
	    System.out.println("shutdownThread...");
	   }
	  };
	  // jvm关闭的时候先执行该线程钩子
	  Runtime.getRuntime().addShutdownHook(shutdownThread);
	  thread1.start();
	  thread2.start();
	 }
	}
 
打印结果:
thread2...
thread1...
shutdownThread...
 
或者:
thread1...
thread2...
shutdownThread...
 
结论:
 
无论是先打印thread1还是thread2,shutdownThread 线程都是最后执行的(因为这个线程是在jvm执行关闭前才会执行)。
钩子方法和回调函数详解 回调函数(callback function)允许一个函数将另一个函数作为参数传递,并在需要的时候调用该函数。在Java中,可以使用接口或Lambda表达式实现回调函数。以下是一个简单的回调函数示例:(1)首先,我们需要定义一个接口,该接口定义了回调函数的规范。在这个例子中,我们定义了一个名为Callback的接口,它有一个方法onResult,该方法接受一个整数参数。(2)然后,我们创建一个类,该类中包含了我们需要执行的业务逻辑代码。在这个例子中,我们假设这段代码是计算两个整数的和。 阅读详情

相关推荐

Runtime.getRuntime().addShutdownHook简介

前言: 在使用线程池的时候,偶然看到了前人的代码里出现了Runtime.getRuntime().addShutdownHook()。 作用: jvm中增加一个关闭的钩子,当jvm关闭的时候,会执行系统中已经设置的所有通过方法addShutdownHook添加的钩子,当系统执行完这些钩子后,jvm才会关闭。所以这些钩子可以在jvm关闭的时候进行内存清理、对象销毁等操作。 使用场景: 多用于内存清理,对象销毁等等。 示例: 以线程池在进程关闭时的处理。 上代码: private static Sche

shengxiaohua1的博客 1335

java 自定义 钩子_java中钩子方法的概念

钩子方法源于设计模式中模板方法(Template Method)模式,模板方法模式的概念为:在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。其主要分为两大类:模版方法和基本方法,而基本方法又分为:抽象方法(Abstract Method),具体方法(Concrete Method),钩子方法(Hook Method)...

weixin_27034523的博客 531

Java钩子方法概念原理详解

主要介绍了Java钩子方法概念原理详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

java的钩子方法

JAVA设计模式之-模板方法+(钩子函数) 1.定义 允许子类对父类的一个或多个步骤进行重写。例如聚合支付场景中有很多共同的步骤,比如验签、四要素验证、风控等等,但是在支付的时候走不同的渠道可能在调用和参数上有很大的不同,比如有的是xml,有的是json,等等。 我们就可以用父类实现通用的逻辑,由子类实现不同的交互逻辑。 2.模板方法+钩子函数示例 顶层接口 BasePay public interface BasePay { //移动支付 void mobilePay(); } 抽象类

weixin_41979002的博客 2947

信息安全-入侵检测技术原理与应用

入侵检测技术原理与应用、入侵检测概述、入侵检测技术、入侵检测系统组成与分类、入侵检测系统主要产品与技术指标、入侵检测系统应用

我的个人博客 1万+

ArcGIS+PLUS+InVEST三件套实战:从零搞定土地利用变化与碳储量预测(附完整数据包)

本文详细介绍了如何整合ArcGIS、PLUS模型和InVEST模型,构建土地利用变化与碳储量预测的完整研究流水线。通过多情景模拟和生态系统服务评估,提供从数据准备到结果验证的实战指南,助力研究者高效完成生态评估项目。

weixin_30399821的博客 545

addShutdownHook的用处

Runtime.getRuntime().addShutdownHook(shutdownHook); 这个方法的含义说明: 这个方法的意思就是在jvm中增加一个关闭的钩子,当jvm关闭的时候,会执行系统中已经设置的所有通过方法addShutdownHook添加的钩子,当系统执行完这些钩子后,jvm才会关闭。所以这些钩子可以在jvm关闭的时候进行内存清理、对象销毁等操作。 ...

love398146779的专栏 194

地图坐标系大全:常用地图坐标系详解与转换指南

地图坐标系是用于描述地图上位置的数学模型。它可以用来表示地球表面上的任意一个点,使得这个点的位置可以在地图上精确定位。不同的地图坐标系采用不同的基准面和投影方式,因此会有不同的坐标系参数,不同的坐标系之间也需要进行坐标转换。在地图制图、导航、GIS等领域中,地图坐标系是一个非常重要的概念。

weixin_39888010的博客 1万+

【转载】addShutdownHook的用处

Runtime.getRuntime().addShutdownHook(shutdownHook);    这个方法的含义说明:        这个方法的意思就是在jvm中增加一个关闭的钩子,当jvm关闭的时候,会执行系统中已经设置的所有通过方法addShutdownHook添加的钩子,当系统执行完这些钩子后,jvm才会关闭。所以这些钩子可以在jvm关闭的时候进行内存清理、对象销毁等

zhangmengjlu的专栏 489

华三模拟器实战:IPSec VPN穿越NAT的完整配置与调试(附常见问题排查)

本文详细解析了华三模拟器中IPSec VPN穿越NAT的完整配置与调试方法,包括基础环境准备、分步配置、ACL协调策略及高级故障排查。通过实战案例和关键参数解析,帮助网络工程师解决IPSec与NAT协同工作的典型问题,提升企业网络安全性。

weixin_33724046的博客 462

倍福---EL2262模块飞拍配置

控制器安装了twincat3,用EL2262实现相机飞拍功能。本文档只介绍如何通过EL2262实现飞拍的触发,并不涉及视觉方面的处理 参考文章: https://author.baidu.com/home?from=bjh_article&app_id=1669190598708386 https://mp.weixin.qq.com/s/r4Iq8kOP-o4_M8vCce5M9g 1、 飞拍的应用 在大多数场合,只能当被检测工件和相机都处于静止状态下才能进行拍照,拍照完成后,再移动工件或相机,进

weixin_41883890的博客 3743

addShutdownHook钩子函数实例

addShutdownHook钩子函数在服务关闭时执行,防止重启服务丢失当前正在执行的任务,但是kill -9 就不行了,通过下面实例你可以很容易上手怎么使用 public class Utility { /** * Convert current time into int type * @param * @return timestamp ...

zhudongdong123的专栏 823

yolov8知识蒸馏代码详解:支持logit和feature-based蒸馏

特别地,在COCO数据集上对MAP中的RetinaNet检测器(resnet50主干)获得了3.4%的性能提升,在Cityscapes数据集上, 针对mIoU指标,PSPNET(resnet-18 backbone)获得5.81%的性能提升。大部分的KD方法都是通过algin学生网络和教师网络的归一化的feature map, 最小化feature map上的激活值的差异。MGD是一种真正通用的基于特征feature的知识蒸馏方法,它可以用于各种任务,包括图像分类,目标检测,语义分割和实例分割。

@bangbang的博客 7286

addShutdownHook的用处--jvm关闭时调用

Runtime.getRuntime().addShutdownHook(shutdownHook);    这个方法的含义说明:        这个方法的意思就是在jvm中增加一个关闭的钩子,当jvm关闭的时候,会执行系统中已经设置的所有通过方法addShutdownHook添加的钩子,当系统执行完这些钩子后,jvm才会关闭。所以这些钩子可以在jvm关闭的时候进行内存清理、对象销毁等操作

leei2345的专栏 1013

基于matlab的阈值分割的车牌定位识别系统

车牌自动识别模块是现代社会智能交通系统(ITS)的重要组成部分,是图像处理和模式识别技术研究的热点,具有非常广泛的应用。车牌识别主要包括以下三个主要步骤:车牌区域定位、车牌字符分割、车牌字符识别。本案例通过对采集的车牌图像进行灰度变换、边缘检测、腐蚀及平滑等过程进行车牌图像预处理,并由此得到一种基于车牌颜色纹理特征的车牌定位方法,最终实现了车牌区域定位。车牌字符分割是为了方便后续对车牌字符进行匹配,从而对车牌进行识别。

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 973

beegfs读取文件完整流程分析

读取小于512KB文件数据,小于1s 读取15MB文件数据,花费7秒。

wfzy的博客 836

Runtime.addShutdownHook()用法

根据 Java API, 所谓 shutdown hook 就是已经初始化但尚未开始执行的线程对象。在Runtime 注册后,如果 jvm 要停止前,这些 shutdown hook 便开始执行。声明:Runtime.addShutdownHook(Thread t)举例如下: package john2;   /**  * test shu

蓝色幻想 4073

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

RunTime.getRunTime().addShutdownHook用法

转载: http://blog.youkuaiyun.com/wgw335363240/archive/2010/08/31/5854402.aspx Runtime.getRuntime().addShutdownHook(shutdownHook);    这个方法的含义说明:     这个方法的意思就是在jvm中增加一个关闭的钩子,当jvm关闭的时候,会执行系统中已经设置的所有通过方法addShutd...

lgshendy的专栏 9797

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

解读addShutdownHook()钩子函数

     在开发中,遇到一个问题。我们每次重启一个应用的时候,总会导致一些正在执行的任务因为机器突然死掉,如果不对这种正在执行的任务记录,处理的话,这些任务就消失了。在重启那个时刻jvm里所发生的所有事情我们都已无所知。这会导致什么样的后果,很难知道。发生的后果也难以管理。所以必须对这种情况进行监控,处理。      后来知道了java的addShutdownHook钩子函数,试了试...

SuperJack 1522

Runtime.getRuntime().addShutdownHook

addShutdownHook()是一个终止处理的方法,这个方法会在Java执行环境全部结束时(调用System.exit方法时,或者所有非守护线程都结束时),调用指定线程的start方法(这时候该线程称为shutdown hook),使用该方法可以编写整个程序的终止处理。 示例1:public class AddShutdownHookTest { public static v

JessieLee_YoYo的专栏 2397

RunTime.getRunTime().addShutdownHook的用法

前言 有时候我们用到的程序不一定总是在JVM里面驻守,可能调用完就不用了,释放资源. RunTime.getRunTime().addShutdownHook的作用就是在JVM销毁前执行的一个线程.当然这个线程依然要自己写. 利用这个性质,如果我们之前定义了一系列的线程池供程序本身使用,那么就可以在这个最后执行的线程中把这些线程池优雅的关闭掉. 案例 比如我们定义了一个线程池 private ExecutorService streamThreadPool = Executors.newFixedThre

weixin_39098944的博客 2796
上一篇: java thread 执行顺序(转)
下一篇: hibernate中OpenSessionInViewFilter的笔记 (转)
tempdowncomputer
博客等级 码龄16年 2粉丝 405原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值