黑马程序员技术交流社区
标题:
关于多线程执行问题
[打印本页]
作者:
张华廷
时间:
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