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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张华廷 中级黑马   /  2012-6-20 11:05  /  2026 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 张华廷 于 2012-6-20 12:11 编辑

public class threaDemo {

        public static void main(String[] args)
        {
                //Demo d=new Demo();//创建好一个线程
                //d.start();
                 
                for(int x=0;x<80;x++)
                {
                        System.out.println("hello word"+x );
                }
                Demo d=new Demo();//创建好一个线程  这两句放在下面一直执行完"hello word"+x,然后才//执行"hello"+x
                d.start();
        }
}
class Demo extends Thread
{
        public void run()
        {
                for(int x=0;x<50;x++)
                {
                System.out.println("hello"+x);
                }
        }
}

6 个回复

倒序浏览
因为主线程 都没执行到那 都没开启咋开启线程
回复 使用道具 举报
你的疑问是什么呢?是说如果放在下面的话只有遍历执行完后才会执行子线程是吗?
这点是肯定的,因为JVM从main方法入口后顺序执行代码,遍历没有执行完,JVM是没法创建子线程的,所以子线程只有等遍历完后执行到new Dome时子线程才会被创建出来。
回复 使用道具 举报
for(int x=0;x<80;x++)
                {
                        System.out.println("hello word"+x );
                }
                Demo d=new Demo();//创建好一个线程  这两句放在下面一直执行完"hello word"+x,然后才//执行"hello"+x
                d.start();

主线程执行到FOR循环的时候线程还没有开启,等FOR循环执行完毕的时候才创建线程并开启线程,所以一直执行完"hello word"+x,然后才//执行"hello"+x

评分

参与人数 1黑马币 +1 收起 理由
张华廷 + 1 赞一个!

查看全部评分

回复 使用道具 举报
在主线程中是按顺序执行的,执行完for循环打印hello world+x之后才新建一个线程并启动线程,才开始打印hello+x啊,楼主有什么疑问呢
回复 使用道具 举报
多线程的开始方法为start()方法。在多线程开启之前,先执行的main()方法内的for循环,然后开启线程才开始执行线程run方法内的for循环
回复 使用道具 举报
吴扬 中级黑马 2012-6-20 12:24:10
7#
在main()方法中,程序是顺序执行的,由于for循环是在主线程当中,虚拟机必定是先将for循环执行完毕再执行后面的代码,所以在你给的这段代码中,首先是先打印了80次输出语句再执行Demo d=new Demo();创建新的线程。此时,for循环已经结束了,所以,只有run()方法里面的代码在运行。楼主如果想看到主线程和子线程交替运行的情况,可以把Demo d=new Demo();    d.start();放到for循环之前就可以了。这是代码的执行顺序问题。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马