为何主线程结束后子线程仍持续运行?Java多线程问题咨询
为什么主线程结束后子线程还在持续执行?
核心原因:
- Java程序的退出条件是所有非守护线程(用户线程)都终止,和主线程是否结束无关。你创建的子线程默认属于用户线程,只要它还在运行,JVM就不会停止。
- 你的子线程
run方法里是while(true)的死循环,没有任何终止逻辑,所以它会一直执行打印操作,不会主动结束。 - 主线程只是程序的入口执行线程,它的完成不代表整个程序生命周期的结束,其他用户线程会继续独立运行。
如何让主线程结束后子线程也停止?
如果希望主线程结束时子线程也随之终止,可以把子线程设置为守护线程。守护线程的生命周期依赖于用户线程,当所有用户线程结束时,JVM会自动终止所有守护线程。
修改后的代码示例:
public static void main(String[] args) { System.out.println("hello"); Thread childThread = new Thread(new Runnable() { int i = 0; public void run() { while (true) { i++; System.out.println("##Child thread i="+ i + "=th= "+ Thread.currentThread().getName()); } } }); childThread.setDaemon(true); // 将子线程设置为守护线程 childThread.start(); System.out.println("Main thread = "+ Thread.currentThread().getName()); }
内容的提问来源于stack exchange,提问作者nantitv
相关产品推荐
相关产品推荐

