Ree*_*ese 8 java multithreading shutdown-hook
我试图在我的ubuntu服务器上运行一个关闭钩子,但是我似乎遇到了多个线程的问题.使用基本的ShutdownHook,当我使用kill进程时,下面的代码可以正常工作kill <PID>,这意味着关闭行为被激活.
public static void main(String[] args) {
ShutdownHook shutDown = new ShutdownHook();
shutDown.attachShutDownHook();
while(true){}
}
Run Code Online (Sandbox Code Playgroud)
但是这个带有附加线程的相同代码却没有
public static void main(String[] args) {
ShutdownHook shutDown = new ShutdownHook();
shutDown.attachShutDownHook();
(new Thread() {
public void run() {
while ( true ) {}
}
}).start();
while(true){}
}
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
class ShutdownHook {
ShutdownHook() {
}
public void attachShutDownHook() {
Runtime.getRuntime().addShutdownHook(new Thread() {
@Override
public void run() {
System.out.println("Shut down hook activating");
}
});
System.out.println("Shut Down Hook Attached.");
}
}
Run Code Online (Sandbox Code Playgroud)
java.lang.Runtime.addShutdownHook( Thread )注册一个新的虚拟机关闭钩子:
Java 虚拟机关闭以响应两种事件:
当最后一个非守护线程退出或调用 exit(相当于 System.exit)方法时,程序正常退出,或者
虚拟机会因响应用户中断(例如键入 ^C)或系统范围的事件(例如用户注销或系统关闭)而终止。
您的代码无限期地运行,因此关闭挂钩永远不会被调用。
[编辑后]
kill你用哪个?
Kill -9 是不可捕获的
Kill -2 可用于模拟 ctrl-c (SIGINT)