Java 优雅地退出程序】的更多相关文章

本文转载自Java 优雅地退出程序 导语 很多情况下,我们的程序需要在操作系统 后台 一直运行,这在程序代码里的实现就是用死循环 ( while (true) ) 来实现的.但是,这样会出现一个问题,就是我们想要关闭程序怎么办?如果用暴力结束进程方式,那程序的内存中若还有未输出的数据,这部分数据将会遗失.因此,我们要对程序实现 退出收尾 操作,这就需要我们完善我们的程序,实现 "优雅" 地退出. 后台进程 首先,我们需要知道什么是后台进程.众所周知,我们与服务器进行交互都需要通过终端进…
捕获Ctrl + C中断 优雅的退出程序 Gracefully terminate a program in Go os/signal 来捕获系统中断等信号 // Notify方法将signal发送到channel, func Notify(c chan<- os.Signal, sig ...os.Signal) // 初始化一个接受os.Signal的通道 c := make(chan os.Signal) // 调用Notify方法,绑定signal到channel,一旦有信号到达,sig…
最近在项目中需要写一个数据转换引擎服务,每过5分钟同步一次数据.具体实现是启动engine server后会初始化一个ScheduledExecutorService和一个ThreadPoolExecutor线程池.schduel executor每过5分钟将dataTransformList中每一个tranform加入到线程池中运行.每一个数据转化器负责转换一组数据库数据.在执行过程中存在服务重启并且此时tranform正在转换数据并且数据没有全部操作完,此时希望正在执行的work能正常完成作…
本文给出一种优雅的拼装elasticsearch查询的方式,可能会使得使用elasticsearch的方式变得优雅起来,使得代码结构很清晰易读. 建立elasticsearch连接部分请参看另一篇博客:http://www.cnblogs.com/kangoroo/p/7127003.html 1.ESDao -- 类似DB中的dao层 封装了增删改查ES的各种方法 package com.dqa.sentinel.client.es; import com.xiaoju.dqa.sentine…
Java的优雅停机通常通过注册JDK的ShootDownHook实现,当系统接受到退出指令后,首先标记系统处于退出状态,不再接受新的消息,然后将积压的消息处理完,最后调用资源回收接口将资源销毁,最后各线程退出执行.…
写在前面 项目开发中,记录错误日志有以下好处: 方便调试 便于发现系统运行过程中的错误 存储业务数据,便于后期分析 在java中,记录日志有很多种方式: 自己实现 自己写类,将日志数据,以io操作方式,写数据到文本文件.数据库中. 使用log4j log4j可以将日志输出到console窗口.文本文件.数据库等,功能强大! 使用slfj slfj也是一个很强大的功能,slfj旨在一统天下,提供了logging.jar 和 log4j的接口,可以通过slfj来调用log4j,也可以调用jdk的lo…
写在前面 项目开发中,记录错误日志有以下好处: 方便调试 便于发现系统运行过程中的错误 存储业务数据,便于后期分析 在java中,记录日志有很多种方式: 自己实现 自己写类,将日志数据,以io操作方式,写数据到文本文件.数据库中. 使用log4j log4j可以将日志输出到console窗口.文本文件.数据库等,功能强大! 使用slfj slfj也是一个很强大的功能,slfj旨在一统天下,提供了logging.jar 和 log4j的接口,可以通过slfj来调用log4j,也可以调用jdk的lo…
一.java的三种注释类型 单行注释:// ...... 块注释:/* ...... */ 文档注释:/** ...... */ 二.指导原则 注释不能美化糟糕的代码,碰到糟糕的代码就重新写吧. 用代码来阐述你的意图,好的代码就是最好的注释. 错误的注释比不注释更可怕. 大括号后不要加注释,建议另起一行. 注释调的代码建议删掉. 废话式注释,循规式注释,误导性注释都应该删掉. 巧用标记(TODO.FIXME) 注释要放在距离其描述代码最近的位置. 三.代码格式列举 这里和大家聊下代码基本格式,好…
资料出处: http://www.sohu.com/a/329564560_700886 https://www.cnblogs.com/nuccch/p/10903162.html 前言 Linux系统下如何kill掉一个后台Java进程,相信童鞋们都知道如何操作.首先使用ps命令查找该Java进程的进程ID,然后使用kill命令进行杀掉.命令如下: (1)ps查进程ID [user@data2 ~]$ ps -ef | grep Test user 2095020809 0 21:30 pt…
在 Java 的世界里遨游,如果能拥有一双善于发现的眼睛,有很多东西留心去看,外加耐心助力,仔细去品,往往会品出不一样的味道. 通过本次分享,能让你轻松 get 如下几点,绝对收获满满. a)如何让 Java 程序实现优雅停服?有思想才是硬道理! b)addShutdownHook 的使用场景?会用才是王道! c)addShutdownHook 钩子函数到底是个啥?刨根问底! 1. 如何让 Java 程序实现优雅停服? 无论是自研基础服务框架,还是分析开源项目源码,细心的 Java 开发同学,都…
1.进程的优雅退出 1.1.Kill -9 PID带来的问题 在Linux上通常会通过kill -9 pid的方式强制将某个进程杀掉,这种方式简单高效,因此很多程序的停止脚本经常会选择使用kill -9 pid的方式. 无论是Linux的Kill -9 pid还是windows的taskkill /f /pid强制进程退出,都会带来一些副作用:对应用软件而言其效果等同于突然掉电,可能会导致如下一些问题: 缓存中的数据尚未持久化到磁盘中,导致数据丢失: 正在进行文件的write操作,没有更新完成,…
前言 本篇随笔用于记录我在学习 Java 和构建 Spring Boot 项目过程中的一些思考,包含架构.组件和部署方式等.下文仅为概要,待闲时逐一整理为详细文档. 1. 组件 开源社区如火如荼,若在当下我们还要去重复 "造轮子" 那真是罪过罪过(当然也并不意味着所有的一切都可拿来即用,了解他,使用他,若有能力,去完善它).因此,当我们拿到需求的时候首先应当进行拆解,哪些模块在社区中已有比较成熟的解决方案,然后大致罗列一个粗略的所需组件列表(后续根据架构的设计和兼容情况再进行调整).…
Java反射 1.示例 1.用户类 package com.lf.entity; import com.lf.annotation.SetProperty; import com.lf.annotation.SetTable; public class UserEntity { private String userName; private int userAge; private final int money = 10000; public String getUserName() { r…
https://blog.csdn.net/aitaozi11/article/details/79652943 (学习Java的9张思维导图) 文章目录 针对技术栈学习 1. java基础 1.1 算法 1.2 基本 1.3 设计模式 1.4 正则表达式 1.5 java内存模型以及垃圾回收算法 2. web方面 2.1 SpringMVC的架构设计 2.2 SpringAOP源码 2.3 Spring事务体系源码以及分布式事务Jotm Atomikos源码实现 2.4 数据库隔离级别 2.5…
前言 今天在慕课网上看到了Java的新教程(Netty入门之WebSocket初体验):https://www.imooc.com/learn/941 WebSocket我是听得很多,没有真正使用过的技术.我之前也去了解过了WebSocket究竟是什么东西,不过一直没有去实践过. 我在写监听器博文的时候,在线人数功能用监听器的是来做,在评论有说使用WebSocket的方式会更加好. 那么,我们就来探究一下WebSocket究竟是什么东西,顺便了解一下Netty! WebSocket介绍 什么是W…
Scoket通信--------这是一个例子,可以在这个例子的基础上进行相应的拓展,核心也是在多线程任务上进行修改 package cn.itcast.bigdata.socket; import java.net.InetSocketAddress; import java.net.ServerSocket; import java.net.Socket; public class ServiceServer { public static void main(String[] args) t…
我们的项目中使用了websocket 用java-websocket 开源项目做的,阿里的人问我用啥实现的websocket一时没有答上来 回来做了总结: 1.前言 最近有同学问我有没有做过在线咨询功能.同时,公司也刚好让我接手一个 IM 项目.所以今天抽时间记录一下最近学习的内容.本文主要剖析了 WebSocket 的原理,以及附上一个完整的聊天室实战 Demo (包含前端和后端,代码下载链接在文末). 2.WebSocket 与 HTTP WebSocket 协议在2008年诞生,2011年…
1 全局保存websocket的通道  NettyConfig.java public class NettyConfig { public static ChannelGroup group = new DefaultChannelGroup(GlobalEventExecutor.INSTANCE); } 2  WebsocketHandler.java  接收处理响应  客户端发来的消息 /** * 接收处理响应客户端处理 * */ public class WebsocketHandle…
导读 在上篇中,我们已经创建了一个 shell 主循环.切分了命令输入,以及通过 fork 和 exec 执行命令.在这部分,我们将会解决剩下的问题.首先,cd test_dir2 命令无法修改我们的当前目录.其次,我们仍无法优雅地从 shell 中退出. 步骤 4:内置命令 “cd test_dir2 无法修改我们的当前目录” 这句话是对的,但在某种意义上也是错的.在执行完该命令之后,我们仍然处在同一目录,从这个意义上讲,它是对的.然而,目录实际上已经被修改,只不过它是在子进程中被修改. 还记…
我们可能都使用过 docker stop 命令来停止正在运行的容器,有时可能会使用 docker kill 命令强行关闭容器或者把某个信号传递给容器中的进程.这些操作的本质都是通过从主机向容器发送信号实现主机与容器中程序的交互.比如我们可以向容器中的应用发送一个重新加载信号,容器中的应用程序在接到信号后执行相应的处理程序完成重新加载配置文件的任务.本文将介绍在 docker 容器中捕获信号的基本知识. 信号(linux) 信号是一种进程间通信的形式.一个信号就是内核发送给进程的一个消息,告诉进程…
本課主題 SQLAlchemy - Core SQLAlchemy - ORM Paramiko 介紹和操作 上下文操作应用 初探堡垒机 SQLAlchemy - Core 连接 URL 通过 create_engine 方法创建 MySQL 数据库的连接,create_engine("url") 接受一个 URL 连接: >>> MySQL-Python: mysql+mysqldb://<user>:<password>@<host&…
逐行读取 稳定性: 2 - 不稳定 使用 require('readline'),可以使用这个模块.逐行读取(Readline)可以逐行读取流(比如process.stdin) 一旦你开启了这个模块,node 程序将不会终止,直到你关闭接口.以下的代码展示了如何优雅的退出程序: var readline = require('readline'); var rl = readline.createInterface({ input: process.stdin, output: process.…
目录 使用 Python 创建你自己的 Shell:Part II 原文链接与说明 步骤 4:内置命令 最后的想法 使用 Python 创建你自己的 Shell:Part II 原文链接与说明 https://hackercollider.com/articles/2016/07/06/create-your-own-shell-in-python-part-2/ 本翻译文档原文选题自 Linux中国 ,翻译文档版权归属 Linux中国 所有 在 part 1 中,我们已经创建了一个主要的 sh…
Netty入门(三)之web服务器 阅读前请参考 Netty入门(一)之webSocket聊天室 Netty入门(二)之PC聊天室 有了前两篇的使用基础,学习本文也很简单!只需要在前两文的基础上稍微改动即可! Maven依赖 <!-- Netty --> <dependency> <groupId>io.netty</groupId> <artifactId>netty-all</artifactId> <version>…
一:简介 Netty 是一个提供 asynchronous event-driven (异步事件驱动)的网络应用框架,是一个用以快速开发高性能.高可靠性协议的服务器和客户端. 换句话说,Netty 是一个 NIO 客户端服务器框架,使用它可以快速简单地开发网络应用程序,比如服务器和客户端的协议.Netty 大大简化了网络程序的开发过程比如 TCP 和 UDP 的 socket 服务的开发. 下载地址:http://netty.io/downloads.html 二:实例 1.自定义配置类 imp…
项目需要使用netty做中转服务器,同时支持两种不同协议的客户端,经过几天查询资料终于找到合适的方案了,同时感谢Netty权威指南及论坛问答,开始贴代码 客户端1==>socket public class Bluetooth implements Runnable { //蓝牙 private int port; @Override public void run() { System.out.println("--------进入蓝牙---------"); EventLoo…
一.需求:计算网页访问量前三名 import org.apache.spark.rdd.RDD import org.apache.spark.{SparkConf, SparkContext} /** * 需求:计算网页访问量前三名 * 用户:喜欢视频 直播 * 帮助企业做经营和决策 * * 看数据 */ object UrlCount { def main(args: Array[String]): Unit = { //1.加载数据 val conf:SparkConf = new Spa…
{ "Author": "tomcat and jerry", "url":"http://www.cnblogs.com/tomcatandjerry/p/5899722.html" } Spring RestTemplate, 使用java访问URL更加优雅,更加方便. 核心代码: String url = "http://localhost:8080/json"; JSONObject json =…
在初中代数中,我们经常会求两个集合的并集.交集.差集等,在Java中也存在着此 类运算,那如何实现呢? 一提到此类集合操作,大部分的实现者都会说:对两个集合进行遍历,即可求出结果.是的,遍历可以实现并集.交集.差集等运算,但这不是最优雅的处理方式.下面来看看如何进行更优雅.快速.方便的集合操作. (1) 并集,(2)交集,(3)差集(补集),(4)无重复并集. 也叫做合集,把两个集合加起来即可,这非常简单,代码如下: import java.util.ArrayList; import java…
面试中经常会问到,创建一个线程池需要哪些参数啊,线程池的工作原理啊,却很少会问到线程池如何安全关闭的. 也正是因为大家不是很关注这块,即便是工作三四年的人,也会有因为线程池关闭不合理,导致应用无法正常stop的情况,还有出现一些报错的问题. 本篇就以ThreadPoolExecutor为例,来介绍下如何优雅的关闭线程池. 01 线程中断 在介绍线程池关闭之前,先介绍下Thread的interrupt. 在程序中,我们是不能随便中断一个线程的,因为这是极其不安全的操作,我们无法知道这个线程正运行在…