当 JVM 被终止时会发生什么情况?
当 JVM 以 或 或类似的任何内容终止时会发生什么?我读到诸如“该过程被吹走了”和“每个线程都被停止”之类的东西,但我想知道究竟发生了什么。我已经知道仍然以某种方式执行,但是在调用关闭Hooks之前会发生什么,并且在所有这些线程完成后会发生什么?System.exit(0)
^C
shutdownHook
我想正确地实现这样一个,为此,我需要对哪些可能仍然执行,什么不会执行做出正确的假设。shutdownHook
更新:
一些代码:
class SomeObject {
private boolean stopped;
SomeObject() {
stopped = false;
Thread hook = new Thread() {
@Override
public void run() {
stopped = true;
}
};
hook.setPriority(Thread.MAX_PRIORITY);
Runtime.getRuntime().addShutdownHook(hook);
}
boolean map(Iterator<Object> it) {
while(it.hasNext() && !stopped) {
writeToOtherObject(it.next());
it.remove();
}
//have calculations finished?
return !it.hasNext();
}
}
该函数计算在某个其他对象中收集的结果。在分解所有内容之前,此对象应存储在某个文件中(也按正常优先级)。这里有意义吗?据我所知,所有线程首先被销毁,然后s被运行(并发,但我假设高优先级线程首先运行...),然后对象被最终确定。这使得上面的代码相当无用,因为这样做的目的是确保在关机已经开始时没有启动新的循环。我的理解是否正确和完整?map
shutdownHook
shutdownHook
shutdownHook
shutdownHook