黑马程序员技术交流社区

标题: 关于多线程执行问题 [打印本页]

作者: 张华廷    时间: 2012-6-20 11:05
标题: 关于多线程执行问题
本帖最后由 张华廷 于 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);
                }
        }
}
作者: 王明明    时间: 2012-6-20 11:13
因为主线程 都没执行到那 都没开启咋开启线程
作者: 杨康    时间: 2012-6-20 11:17
你的疑问是什么呢?是说如果放在下面的话只有遍历执行完后才会执行子线程是吗?
这点是肯定的,因为JVM从main方法入口后顺序执行代码,遍历没有执行完,JVM是没法创建子线程的,所以子线程只有等遍历完后执行到new Dome时子线程才会被创建出来。
作者: 李伟    时间: 2012-6-20 11:23
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

作者: 王晓新    时间: 2012-6-20 11:53
在主线程中是按顺序执行的,执行完for循环打印hello world+x之后才新建一个线程并启动线程,才开始打印hello+x啊,楼主有什么疑问呢
作者: 吴扬    时间: 2012-6-20 12:24
在main()方法中,程序是顺序执行的,由于for循环是在主线程当中,虚拟机必定是先将for循环执行完毕再执行后面的代码,所以在你给的这段代码中,首先是先打印了80次输出语句再执行Demo d=new Demo();创建新的线程。此时,for循环已经结束了,所以,只有run()方法里面的代码在运行。楼主如果想看到主线程和子线程交替运行的情况,可以把Demo d=new Demo();    d.start();放到for循环之前就可以了。这是代码的执行顺序问题。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2