java使用ShutdownHook优雅地停止服务

在Java程序中可以通过添加关闭钩子,实现在程序退出时关闭资源、平滑退出的功能。 
使用Runtime.addShutdownHook(Thread hook)方法,可以注册一个JVM关闭的钩子,这个钩子可

这通常用于确保在应用程序退出时能够执行一些清理工作,比如关闭文件流、释放资源、断开数据库连接等。

要使用ShutdownHook,你需要实现一个Runnable接口,并将其添加到Runtime.getRuntime()的钩子列表中。以下是如何使用ShutdownHook的步骤和示例:

步骤:

  1. 创建一个Runnable实现类: 创建一个类实现Runnable接口,并在run方法中定义当ShutdownHook被触发时要执行的代码。

  2. 添加ShutdownHook到Runtime: 使用Runtime.getRuntime().addShutdownHook方法将你的Runnable实例添加到JVM的ShutdownHook列表中。

  3. 移除ShutdownHook(可选): 如果你需要在某个时刻移除ShutdownHook,可以使用Runtime.getRuntime().removeShutdownHook方法。

代码

package com.yang.SpringTest.java;/*** <p>KillJavaTest</p>** @author By: chengxuyuanshitang* Package com.yang.SpringTest.java* Ceate Time 2024-04-13 09:49*/
public class ShutdownHookTest {public static void main (String[] args) {boolean flag = true;Runtime.getRuntime ().addShutdownHook (new Thread (new Runnable () {public void run () {System.out.println ("Run shutdown hook now.");}}, "ShutdownHookTest"));while (flag) {}System.out.println ("程序退出");}
}

在linux执行运行

javac ShutdownHookTest.java java ShutdownHookTest

再开一个新的命令窗口
jps

kill -15 3877

查看java运行的窗口输出

为什么要用kill -15呢,看下面的文章

【Linux】kill 命令使用-CSDN博客




本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/813964.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

openssl3.2 - exp - zlib

文章目录 openssl3.2 - exp - zlib概述笔记命令行实现程序实现备注 - 压缩时无法base64压缩时无法带口令压缩实现 - 对buffer进行压缩和解压缩测试效果工程实现main.cppCOsslZlibBuffer.hCOsslZlibBuffer.cpp总结备注 - 解压可以替代完整性校验备注 - 多次压缩没作用备注 - 和7…

Lambda表达式保姆级教程详解(二)

本系列文章简介&#xff1a; Lambda表达式在现代编程语言中越来越流行&#xff0c;如Java、Python等。它是一种简洁、灵活的编码方式&#xff0c;能够使代码更易读、更易编写&#xff0c;同时提高代码的可维护性和扩展性。 Lambda表达式的引入使得函数式编程思想在传统的面向对…

海外媒体发稿:探究7个旅游业媒体套餐背后的秘密-华媒舍

旅游业媒体套餐对于旅游行业来说扮演着重要的角色&#xff0c;帮助企业在竞争激烈的市场中宣传推广&#xff0c;吸引更多的游客。在这篇文章中&#xff0c;我们将深入探究7个旅游业媒体套餐背后的秘密&#xff0c;为您揭示其真正的价值和影响。 1. 平台选择的关键 在选择旅游业…

博士找教职--经验贴

目录 一、如何寻找教职&#xff1f; 二、海投还是多投&#xff1f; 三、博士什么时候找工作最好&#xff1f; 为什么9月份开始最好&#xff1f; 四、论文没有出来可以9月找工作吗&#xff1f; 五、其他的一些嘱咐 一、如何寻找教职&#xff1f; 上必应键入关键词&#xf…

leetcode最长有效括号

. - 力扣&#xff08;LeetCode&#xff09; 32. 最长有效括号 困难 相关标签 相关企业 给你一个只包含 ( 和 ) 的字符串&#xff0c;找出最长有效&#xff08;格式正确且连续&#xff09;括号 子串 的长度。 示例 1&#xff1a; 输入&#xff1a;s "(()" 输…

spring boot学习第十七篇:OAuth2概述及使用GitHub登录第三方网站

0. 导言 我们在浏览器上可以访问成百上千个网站&#xff0c;使用每个网站的服务一般都要先注册账号&#xff0c;那么我们为了更好地记忆&#xff0c;一般都会在多个网站使用相同的账号和密码进行注册。那么问题就来了&#xff0c;如果在你注册的网站中有某些个网站的系统设计不…

CentOS7里ifcfg-eth0文件不存在解决方案/Centos7修改网络IP解决方案

Centos7网络IP地址手动设置 1、centos7没有ifcfg-eth0&#xff0c;我的centos7也没有其他博客说的什么ifcfg-ens33、ifcfg-ens32&#xff0c;然后我打开了我这里的ifcfg-eno***&#xff0c;结果发现就是centos6里的ifcfg-eth0里的网络配置。2、vim ifcfg-eno***&#xff08;按t…

202203青少年软件编程(Scratch图形化) 等级考试试卷(四级)

第1题&#xff1a;【 单选题】 由1,2,3,4,5,0这六个数字经过排列组合能够组成多少个六位数偶数&#xff1f; 注意&#xff1a; 每一位都不相同&#xff0c; 最高位不能为0。&#xff08; &#xff09; A:720 B:360 C:312 D:88 【正确答案】: C 【试题解析】 : 逻辑知识…

10分钟带你学会配置DNS服务正反向解析

正向解析 服务端IP客户端IP网址192.168.160.134192.168.160.135www.openlab.com 一、首先做准备工作&#xff1a; 关闭安全软件&#xff0c;关闭防火墙&#xff0c;下载bind软件 [rootserver ~]# setenforce 0 [rootserver ~]# systemctl stop firewalld [rootserver ~]# y…

【C++程序员的自我修炼】拷贝构造函数

心存希冀 追光而遇目有繁星 沐光而行 目录 拷贝构造函数概念 拷贝构造的特征 无穷递归的解释 浅拷贝 总结&#xff1a; 深拷贝 拷贝构造函数典型调用场景 总结 契子✨ 在生活中总有很多琐事&#xff0c;不做不行做了又怕麻烦&#xff0c;有时候想要是有个和自己一模一样的人就…

springboot中常见的设计模式

Spring Boot&#xff0c;作为基于Spring框架的扩展&#xff0c;广泛应用了多种设计模式来简化企业级应用开发。以下是在Spring Boot中常见的一些设计模式&#xff1a; 1. 单例模式&#xff08;Singleton Pattern&#xff09; 这是Spring框架中最常用的模式之一。Spring容器默…

每日一题 第八十九期 洛谷 [NOIP2017 提高组] 奶酪

[NOIP2017 提高组] 奶酪 题目背景 NOIP2017 提高组 D2T1 题目描述 现有一块大奶酪&#xff0c;它的高度为 h h h&#xff0c;它的长度和宽度我们可以认为是无限大的&#xff0c;奶酪中间有许多半径相同的球形空洞。我们可以在这块奶酪中建立空间坐标系&#xff0c;在坐标系…

Go——面向对象

一. 匿名字段 go支持只提供类型而不写字段名的方式&#xff0c;也就是匿名字段&#xff0c;也称为嵌入字段。 同名字段的情况 所以自定义类型和内置类型都可以作为匿名字段使用 指针类型匿名字段 二.接口 接口定义了一个对象的行为规范&#xff0c;但是定义规范不实现&#xff…

搞懂docker一篇就够了

在数字化浪潮汹涌的今日,Docker以其独特的魅力,引领着容器技术的风潮,成为众多开发者、运维人员乃至架构师们心中的宠儿。今日就带领大家一同探寻Docker的奥秘,感受其带来的便捷与高效。 Docker,这个看似简单的词汇,却蕴含着无尽的智慧与力量。它就像一位高超的魔术师,…

FreeSWITCH 1.10.10 简单图形化界面17 - ubuntu22.04或者debian12 安装FreeSWITCH

FreeSWITCH 1.10.10 简单图形化界面17 - ubuntu22.04或者debian12 安装FreeSWITCH 界面预览00、先看使用手册0、安装操作系统1、下载脚本2、开始安装3、登录网页FreeSWITCH界面安装参考:https://blog.csdn.net/jia198810/article/details/132479324 界面预览 http://myfs.f3…

Matlab之过球面一点的平面方程

这篇文章描述2件事情&#xff1a; 1、已知球面上任意点&#xff0c;求过该点、地心、与北极点的平面方程&#xff08;即过该点的经线平面方程&#xff09;&#xff1b; 2、绕过球心的任意轴旋转平面得到新平面的方程 一、已知球面上任意点&#xff0c;求过该点、地心、与北极点…

javase_进阶 day10 集合(泛型,数据结构)

1.泛型 1.1泛型概述 泛型的介绍 ​ 泛型是JDK5中引入的特性&#xff0c;它提供了编译时类型安全检测机制 泛型的好处 把运行时期的问题提前到了编译期间避免了强制类型转换 泛型的定义格式 <类型>: 指定一种类型的格式.尖括号里面可以任意书写,一般只写一个字母.例如:…

CopyTranslator下载地址及安装教程

CopyTranslator是一款免费且开源的机器翻译工具&#xff0c;旨在提供快速、便捷的翻译服务。它采用了先进的神经网络机器翻译技术&#xff0c;能够提供准确、流畅的翻译结果。 CopyTranslator的特点和功能如下&#xff1a; 多语言翻译&#xff1a;支持多种常见的语言对&#…

【随笔】Git 高级篇 -- 项目里程碑 git tag(二十)

&#x1f48c; 所属专栏&#xff1a;【Git】 &#x1f600; 作  者&#xff1a;我是夜阑的狗&#x1f436; &#x1f680; 个人简介&#xff1a;一个正在努力学技术的CV工程师&#xff0c;专注基础和实战分享 &#xff0c;欢迎咨询&#xff01; &#x1f496; 欢迎大…

CuraEngine之代码阅读(1)之路径优化函数 PathOrderOptimizer::optimize

CuraEngine之代码阅读&#xff08;1&#xff09;之路径优化函数 注&#xff1a;整理一些突然学到的C知识&#xff0c;随时mark一下 例如&#xff1a;忘记的关键字用法&#xff0c;新关键字&#xff0c;新数据结构 C 的 STL CuraEngine之代码阅读&#xff08;1&#xff09;之路径…