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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 山水游客 中级黑马   /  2012-6-3 15:19  /  1396 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

public class RunnableDemo implements Runnable
{
       
        @Override
        public void run()
        {
       
                for (int i = 0; i < 10; i++)
                {
                        System.out.println("新线程为:" + i);
                }
        }
       
        public static void main(String[] args)
        {
       
                Runnable runnable = new RunnableDemo();
                Thread thread = new Thread(runnable);
                thread.start();
                for (int i = 0; i < 10; i++)
                {
                        System.out.println("主线程输出: " + i);
                }
        }
}
调试的结果是
主线程输出: 0
主线程输出: 1
主线程输出: 2
主线程输出: 3
主线程输出: 4
主线程输出: 5
主线程输出: 6
主线程输出: 7
主线程输出: 8
主线程输出: 9
新线程为:0
新线程为:1
新线程为:2
新线程为:3
新线程为:4
新线程为:5
新线程为:6
新线程为:7
新线程为:8
新线程为:9

怎么没有出现多线程运行的for循环语句交替输出的效果呢?

6 个回复

倒序浏览
循环太少了。i<1000试一下;
回复 使用道具 举报
因为在执行run()时, main()中的for循环已经完成,因为循环次数少的速度快,所以在执行run() 方法时 ,“ main()中的for循环输出已经完成,你可以把
下面一个for循环的次数改为500,就可以看到效果了。

评分

参与人数 1技术分 +1 收起 理由
袁錦泰 + 1

查看全部评分

回复 使用道具 举报
多运行几次
回复 使用道具 举报
这位同学,黑马视频里的线程部分有说明哈,小弟在这里说点自己的理解哈。

问题原因:
首先,多线程同时并列进行,只是理论上的,就我们现在大部分人用的单核处理器电脑来说。
所谓的多线程就是,看CPU心情啦,给你运行一会~给他运行一会~   因为速度太快,所以感觉上就像同时并行的进行一样~
就像老师说的那样“像是两个人在互相抢CPU,你抢到一会就运行一会,他抢到了他又运行一会。。。”

所以你的机器好的话,且事例循环次数太少就会发生- - 刷~的一下,一个线程直接运行结束,然后另一个再进行。

解决办法:
1是可以添加循环次数~
2是多运行几次看看~
应该就可以看出效果啦
回复 使用道具 举报
本帖最后由 何拴绪 于 2012-6-3 19:43 编辑

你的循环次数过少,Cpu执行速度很快,main线程已经结束了,run方法才开始执行。楼主可以将两个for循环中添加线程sleep方法,并将循环次数改大一点,这样就可以看到明显的效果了,你的代码我修该了一下:
  1. public class RunnableDemo implements Runnable
  2. {
  3.          
  4.         @Override
  5.          public void run()
  6.          {
  7.          
  8.                 for (int i = 0; i < 100;i++)
  9.                  {
  10.                                     try{Thread.sleep(100);}catch(Exception e){};
  11.                       System.out.println("新线程为:" + i);
  12.                  }
  13.          }
  14.          
  15.         public static void main(String[] args) throws Exception
  16.          {
  17.          
  18.                 Runnable runnable = new RunnableDemo();
  19.                  Thread thread = new Thread(runnable);
  20.                  thread.start();
  21.                                  
  22.                  for (int i = 0; i < 50; i++)
  23.                  {
  24.                     Thread.sleep(100);//主线程sleep100毫秒
  25.                       System.out.println("主线程输出: " + i);
  26.                  }
  27.          }
  28. }
复制代码
回复 使用道具 举报
主线程循环次数太少,当run()函数还没运行时main函数的for循环已经完毕,建议将主函数循环改大或者多试几次应该有效果
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马