黑马程序员技术交流社区

标题: 多线程的小问题 [打印本页]

作者: CHJ    时间: 2013-9-9 17:57
标题: 多线程的小问题
本帖最后由 CHJ 于 2013-9-9 18:25 编辑
  1. class Demo extends Thread
  2. {
  3.         public void run()
  4.         {
  5.                 for (int x = 0; x < 50; ++x)
  6.                 {
  7.                         System.out.println("x = " + x);
  8.                 }               
  9.         }
  10. }


  11. class ThreadDemo
  12. {
  13.         public static void main(String[] args)
  14.         {
  15.                 Demo d = new Demo(); //创建一个线程
  16.                 d.start();//开启线程并执行线程的run方法
  17.                 //d.run   //仅仅是对象调用方法,而线程创建了,并没有运行

  18.                 for (int x = 0; x < 50; ++x)
  19.                 {
  20.                         System.out.println("Hello World!---" + x);
  21.                 }
  22.         }
  23. }
复制代码
我执行了很多次,发现每次第一个打印的都是“Hello World!--- 0”,是因为先进主线程么?
------------------------
在毕老师11天02的视频里25分40秒左右,老师说有可能先执行完run(),在执行主函数,谁帮我解释一下啊


作者: 武嘉豪    时间: 2013-9-9 18:17

如图,多线程是靠CPU不断切换执行的线程来实现的。
当指针指向哪个线程的时候就执行哪个线程。
所以线程的执行顺序是随机的
作者: CHJ    时间: 2013-9-9 18:21
武嘉豪 发表于 2013-9-9 18:17
如图,多线程是靠CPU不断切换执行的线程来实现的。
当指针指向哪个线程的时候就执行哪个线程。
所以线程的 ...

额,谢谢了,看来我执行了100来次,都是巧合。。。

作者: 李锡碧    时间: 2013-9-9 18:22
main也是线程,
Demo d = new Demo(); //创建一个线程

d.start();//开启线程并执行线程的run方法

线程的执行顺序是随机的,分配给谁资源就执行下。

反例.jpg (28.92 KB, 下载次数: 29)

看看哦

看看哦

作者: CHJ    时间: 2013-9-9 18:25
李锡碧 发表于 2013-9-9 18:22
main也是线程,
Demo d = new Demo(); //创建一个线程

嗯嗯,ok了~谢了哈
作者: 李锡碧    时间: 2013-9-9 18:27
CHJ 发表于 2013-9-9 18:25
嗯嗯,ok了~谢了哈

那个传错了

反例2.jpg (19.55 KB, 下载次数: 25)

反例2.jpg

作者: CHJ    时间: 2013-9-9 18:32
李锡碧 发表于 2013-9-9 18:27
那个传错了

你执行的时候,x=0在上面的次数多么,我刚才又试了试,终于出现了一次。。。
作者: 静以修身    时间: 2013-9-9 18:32
首先主线程一直都存在的,执行到d.start()的时候开启了一个线程和主线程交替运行,这时不存在谁先谁后的关系。可能是你的cup问题吧,你多试几下应该没问题的。在我的机器上运行是ok的:

作者: 李锡碧    时间: 2013-9-9 18:35
CHJ 发表于 2013-9-9 18:32
你执行的时候,x=0在上面的次数多么,我刚才又试了试,终于出现了一次。。。 ...

随机的,不过概率分布上可能偏向main线程的感觉...  
作者: .....淡定    时间: 2013-9-9 19:04
随机的。。主线程先出现的概率比较大,多试试。会出现其他情况的




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