我正在尝试在我的Ubuntu服务器上让一个关闭挂钩生效,但是似乎存在多个线程的问题。使用基本的ShutdownHook时,当我使用“kill <PID>”杀死进程时,下面的代码确实可以工作,这意味着关闭行为被激活。
public static void main(String[] args) {
ShutdownHook shutDown = new ShutdownHook();
shutDown.attachShutDownHook();
while(true){}
}
然而,带有额外线程的同样代码却无法运行。
public static void main(String[] args) {
ShutdownHook shutDown = new ShutdownHook();
shutDown.attachShutDownHook();
(new Thread() {
public void run() {
while ( true ) {}
}
}).start();
while(true){}
}
有什么想法吗?
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.");
}
}
kill
后运行jstack <PID>
以查看仍在运行的线程。 - SimonC