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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始


  1. <P>public class test1  {
  2. public static void main(String[] args){
  3.   new Thread1().start();
  4.   for(int i=0;i<10;i++){
  5.    System.out.println("main");
  6.   }
  7. }
  8. }
  9. class Thread1 extends Thread{
  10. public void run(){
  11.   for(int i=0;i<10;i++){
  12.    System.out.println("thread");
  13.   }
  14. }
  15. }</P>
复制代码
输出结果是:
main
main
main
main
main
main
main
main
main
main
thread
thread
thread
thread
thread
thread
thread
thread
thread
thread
为什么不是间隔出现呢,书上的输出是main和thread间隔出现啊

评分

参与人数 1技术分 +1 收起 理由
Sword + 1

查看全部评分

5 个回复

倒序浏览
这时由于每个线程获得cpu的执行权是随机的,有可能主线程获得cpu执行权后就一直执行,而Thread1线程争抢不到执行权。所以会出现这种情况。另外,双核的cpu也会导致这种情况的发生。建议把执行的次数改多些,在加个sleep,应该就会达到你想要的目的。看改的代码(类名注意,首字母要大写):
  1. public class Test1  {

  2. public static void main(String[] args) throws Exception{

  3.   new Thread1().start();

  4.   for(int i=0;i<100;i++){
  5.           Thread.sleep(10);
  6.    System.out.println("main");

  7.   }

  8. }

  9. }

  10. class Thread1 extends Thread{

  11. public void run(){

  12.   for(int i=0;i<100;i++){
  13.           try {
  14.                 Thread.sleep(10);
  15.         } catch (InterruptedException e) {
  16.                 // TODO Auto-generated catch block
  17.                 e.printStackTrace();
  18.         }
  19.    System.out.println("thread");

  20.   }

  21. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
Sword + 1

查看全部评分

回复 使用道具 举报
循环次数太少,将俩个类中i  值改成100。
另外运行后,由于线程之间抢占资源,输出结果是随机的。
即使 i 值 改成100.出现你这种结果也是有可能的。
多试几次就出来了

评分

参与人数 1技术分 +1 收起 理由
Sword + 1

查看全部评分

回复 使用道具 举报
上面两位已经讲解的很是详细了。
由于现在有两个线程,main线程和Thread1线程。又由于线程运行的不确定性。所以书上和你运行的结果都是有可能的。

评分

参与人数 1技术分 +1 收起 理由
Sword + 1

查看全部评分

回复 使用道具 举报
计算机速度快嘛  一到十主线程眨眼就运行完了,可能那时候副线程还处在就绪状态没有开始执行呢,所以就被主线程一骑绝尘咯!~~嘿嘿 ~~~个人理解 !
回复 使用道具 举报
使用while(true) 把代码块括起来,就有结果了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马