JVM关闭
(1)关闭钩子
在正常关闭中,JVM首先调用所有已注册的关闭钩子(shutdownHook);
关闭钩子是指通过Runtime.addShutdownHook注册的但尚未开始的线程
关闭钩子可以用于实现服务或应用程序的清理工作,例如删除临时文件,或者消除无法由操作系统自动清除的资源。
(2)守护线程
守护线程:创建一个线程来执行一些辅助工作,又不希望这个线程阻碍jvm的关闭。
线程分两种:普通线程和守护线程;默认情况下,主线程创建的所有线程都是普通线程;
普通线程与守护线程之间的区别:仅在于当线程退出时发生的操作。当一个线程退出时,jvm会检查其他正在运行的线程,如果这些线程都是守护线程,那么jvm会正常退出操作。当jvm停止时,所有仍然存在的守护线程都会被抛弃。
(3)终结器(finalize)
由于终结器可以在某个由jvm管理的线程中运行,因此终结器访问的任何状态都可能被多个线程访问,这样就必须对其访问操作进行同步。