-
JVM关闭的措施
(1) 正常关闭
1° 最后一个非守护线程结束
2° 调用System.exit()
3° 特定平台的关闭错误(例如SIGINT信号或CTRL+C)
(2) 非正常关闭
1° Runtime.halt()
2° 操作系统中强行kill
-
关闭钩子
(1) 关闭钩子
通过Runtime.addShutdownHook注册的、但是尚未开始的线程
(2) 在__正常关闭__中, JVM会调用所有关闭钩子, 等它们都执行结束后再结束
(3) 关闭钩子将__并发执行__
(4) 如果在关闭应用程序线程时, 仍然有线程在运行, 那么JVM不会停止或中断它们, 而是在JVM结束时直接把它们强行结束
(5) 关闭钩子一般用于实现__清理工作__
(6) 由于关闭钩子会并发执行, 因此应该__对所有服务使用同一个关闭钩子__
(7) 示例
... public void start() { ... Runtime.getRuntime().addShutdownHook(new Thread() { public void run() { try { LogService.this.stop(); } catch ( InterrupedException ignored) { } } } ... } -
守护线程
(1) JVM启动时创建的所有线程中, 除了主线程, 其他都是守护线程
(2) 新线程默认继承创建它的线程的守护状态, 但是也可以自己在start()前set
(3) 当JVM停止时, 所有仍然存在的守护线程都将直接被抛弃(不会执行finally代码块)
(4) 守护线程尽可能不要用, 因为它们直接就会被关闭我们却不知道
chapter07_取消与关闭_4__JVM关闭
本文深入探讨了JVM的正常与非正常关闭机制,包括System.exit()、Runtime.halt()及操作系统信号等触发方式。详细解析了关闭钩子的注册与执行流程,以及守护线程在JVM关闭过程中的行为,为开发者提供了理解和优化应用程序关闭流程的指南。

被折叠的 条评论
为什么被折叠?



