java 优雅退出
2016-07-12 00:00
190 查看
摘要: netty使用的也是如此
package com.hhly.game.test;
import java.util.concurrent.TimeUnit;
import sun.misc.Signal;
import sun.misc.SignalHandler;
public class ShutDownGracefully implements SignalHandler{
private static String getOSSignalType(){
return System.getProperties().getProperty("os.name").toLowerCase().startsWith("win") ? "INT" : "USR2";
}
public static void main(String[] args) throws InterruptedException {
Signal sig = new Signal(getOSSignalType());
Signal.handle(sig, new ShutDownGracefully());
Object o = new Object();
synchronized (o) {
o.wait(10000);
}
Runtime.getRuntime().exit(0);
}
@Override
public void handle(Signal signalName) {
invokeShutdownHook();
}
private void invokeShutdownHook(){
Thread t = new Thread(new ShutdownHook(), "ShutdownHook-Thread");
Runtime.getRuntime().addShutdownHook(t);
}
}
class ShutdownHook implements Runnable{
@Override
public void run() {
System.out.println("ShutdownHook execute start...");
System.out.print("Netty NioEventLoopGroup shutdownGracefully...");
try {
TimeUnit.SECONDS.sleep(10000);//模拟应用进程退出前的处理操作
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("ShutdownHook execute end...");
System.out.println("Sytem shutdown over, the cost time is 10000MS");
}
}
windows 运行后 按ctrl+c, linux kill -12 pid
package com.hhly.game.test;
import java.util.concurrent.TimeUnit;
import sun.misc.Signal;
import sun.misc.SignalHandler;
public class ShutDownGracefully implements SignalHandler{
private static String getOSSignalType(){
return System.getProperties().getProperty("os.name").toLowerCase().startsWith("win") ? "INT" : "USR2";
}
public static void main(String[] args) throws InterruptedException {
Signal sig = new Signal(getOSSignalType());
Signal.handle(sig, new ShutDownGracefully());
Object o = new Object();
synchronized (o) {
o.wait(10000);
}
Runtime.getRuntime().exit(0);
}
@Override
public void handle(Signal signalName) {
invokeShutdownHook();
}
private void invokeShutdownHook(){
Thread t = new Thread(new ShutdownHook(), "ShutdownHook-Thread");
Runtime.getRuntime().addShutdownHook(t);
}
}
class ShutdownHook implements Runnable{
@Override
public void run() {
System.out.println("ShutdownHook execute start...");
System.out.print("Netty NioEventLoopGroup shutdownGracefully...");
try {
TimeUnit.SECONDS.sleep(10000);//模拟应用进程退出前的处理操作
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("ShutdownHook execute end...");
System.out.println("Sytem shutdown over, the cost time is 10000MS");
}
}
windows 运行后 按ctrl+c, linux kill -12 pid
相关文章推荐
- velocity模板库的实际使用
- java*正则表达式
- spring配置必须声明元素类型 "context:component-scan"。
- cannot be cast to javassist.util.proxy.Proxy
- Java 线程数据交换控制器Exchange使用实例
- java中的==、equals()、hashCode()源码分析
- Java操作二叉红黑树
- java 泛型详解(普通泛型、 通配符、 泛型接口)
- JDK 1.8.0_92 Arrays.sort()方法不可用?【jdk1.8无法与myeclipse8.6匹配的问题】
- 框架 day68 SpringMVC入门(框架原理,springmvc和mybatis整合,参数绑定)
- Java基础与案例开发详解の常用类的介绍
- Java学习网址
- java序列化
- Enum、EnumMap、EnumSet的用法讲解
- java成员变量的初始化顺序
- springmvc流程
- selenium测试(Java)--鼠标事件(六)
- 第6章 Java访问控制权限
- java.text.DecimalFormat
- java socket客户端和服务端实例