A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

多线程中,main线程结束之后,从线程怎么还在执行啊,请看以下代码:
class JoinThread extends Thread
{
        private int i;
        public void run()
        {
                try
                {
                        sleep(10);
                        for (; i < 1000 ; i++ )
                        {
                                System.out.println(getName() + " " + i);
                        }
                }
                catch (Exception e)
                {
                        System.out.println(e.toString());
                }                       
               
        }

        public static void main(String[] args)  
        {
                JoinThread jt = new JoinThread();
                jt.start();
                System.out.println("Hello World!");
        }
}
执行结果如下:
Hello World!
Thread-0 0
Thread-0 1
Thread-0 2
Thread-0 3
Thread-0 4
Thread-0 5
Thread-0 6
Thread-0 7
Thread-0 8
Thread-0 9
Thread-0 10
。。。。


为什么主线程都打印hello world结束了,Thread0还在执行,而且thread0还休眠了10s让出了处理器

评分

参与人数 1技术分 +1 收起 理由
轻语。 + 1

查看全部评分

3 个回复

倒序浏览
线程分守护线程和用户线程,线程默认为用户线程,线程是分开的,相互不影响,要不也不叫多线程
回复 使用道具 举报 1 0
在你的代码中,有两个线程:主线程和jt线程

这两个线程都属于前台线程,只有当两个线程都结束后,程序才会结束。
不存在main线程完成,jt就要强制退出的结果。

可以使用守护线程,来实现你想要的效果。
将jt设置为守护线程,当前台线程(main线程)结束后,守护线程强制结束。

class JoinThread extends Thread
{
        private int i;
        public void run()
        {
                try
                {
                        //这里改为100,可以让jt一个都不能输出
                        sleep(100);
                        for (; i < 1000 ; i++ )
                        {
                                System.out.println(getName() + " " + i);
                        }
                }
                catch (Exception e)
                {
                        System.out.println(e.toString());
                }                        

        }

        public static void main(String[] args)  
        {
                JoinThread jt = new JoinThread();
                //守护线程必须在线程开启之前设置。
                jt.setDaemon(true);
                jt.start();
                System.out.println("Hello World!");
        }
}

评分

参与人数 1技术分 +1 收起 理由
轻语。 + 1

查看全部评分

回复 使用道具 举报 2 0
还没学到多线程,唉
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马