我有一个Swing界面,当我点击一个按钮时,一个线程是在无限远处创建的(属时为(true)...)。
我的问题是:当我关闭主进程时,创建的线程会自动关闭吗?
答案 0 :(得分:5)
取决于你启动的线程是否是守护程序线程,以及你如何关闭主进程。
以下是标准库中的relevant documentation:
当Java虚拟机启动时,通常会有一个非守护程序线程(通常调用某个指定类的名为main的方法)。 Java虚拟机继续执行线程,直到出现以下任一情况:
已调用类Runtime的exit方法,安全管理器已允许退出操作。
所有非守护程序线程的线程都已死亡,无论是通过从run方法的调用返回还是抛出一个超出run方法传播的异常。
因此,如果您按System.exit
或jframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)
关闭主进程,则关闭时所有线程都将死亡。
如果只是让主线程(运行public static void main
的线程)从主方法的边缘掉落,那么线程将继续运行。
答案 1 :(得分:1)
是的,只要它没有设置为守护程序线程。您可以使用jps工具查看已检测的JVM:
jps -l