gpt4 book ai didi

java - JVM 如何终止守护线程?或如何编写优雅终止的守护线程

转载 作者:IT老高 更新时间:2023-10-28 21:13:03 25 4
gpt4 key购买 nike

假设场景:
我有一个守护线程负责一些 I/O,主线程完成并返回,JVM 决定终止我的守护线程。

它是如何做到的?打断?敲定?如何编码我的守护线程,以便它在终止时做出优雅的 react ?

最佳答案

我只是写了以下代码作为测试:

public class DaemonThreadPlay {
public static void main(String [] args) {
Thread daemonThread = new Thread() {
public void run() {
while (true) {
try {
System.out.println("Try block executed");
Thread.sleep(1000l);
} catch (Throwable t) {
t.printStackTrace();
}
}
}

@Override
public void finalize() {
System.out.println("Finalize method called");
}
};
daemonThread.setDaemon(true);
daemonThread.start();

try {
Thread.sleep(2500l);
} catch (Throwable t) {
//NO-OP
}
}
}

我在守护线程的 catch block 和 finalize 方法中设置了断点。即使执行了 try block ,也没有到达断点。显然这段代码存在同步/计时问题,但我认为我们可以安全地得出结论,守护线程不会在关闭时中断,也不一定会调用它们的 finalize() 方法。

您始终可以向 JVM 运行时添加关闭 Hook :

Thread shutdownHook = ... // construct thread that somehow
// knows about all the daemon threads
Runtime.getRuntime().addShutdownHook(shutdownHook);

您的关闭 Hook 显然可以执行“优雅”关闭所需的任何任务。

关于java - JVM 如何终止守护线程?或如何编写优雅终止的守护线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8663107/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com