You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何主线程结束后子线程仍持续运行?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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 05:42:36