-
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关闭
最新推荐文章于 2021-01-28 19:16:57 发布