当前位置:编程学习 > JAVA >>

这个多线程怎么无法正常运行?

public class ThreadDemo9_1
{
   public static void main(String args[])
   {
      new TestThread().start();
  
  for(int i=0;i<10;i++)
  {
    System.out.println("main 线程运行");
  
  }
  
   
   }
  
}

class TestThread extends Thread
{
  public void run()
  {
    
 for(int i=0;i<10;i++)
  {
    System.out.println("TestThread 线程运行");
  
  }
  
  }

}


这里的结果并非书上说的交替出现,而是先出现完所有 main 的,然后才出现所有的 TestThread的,

这是什么原因?

--------------------编程问答-------------------- 循环次数太少了,看不出效果。
可以多试几遍。
或把循环次数改大一点 , 例如 写成  i < 10000 --------------------编程问答-------------------- 因为两个线程你可以相比于2个程序,这两个程序去抢占CPU,根据优先级等分配时间片,故而不是书中所写的交替出现,如果你的次数足够多,可以看到交替。 --------------------编程问答-------------------- 把for(int i=0;i<10;i++)改成while(true) --------------------编程问答--------------------
引用 2 楼  的回复:
因为两个线程你可以相比于2个程序,这两个程序去抢占CPU,根据优先级等分配时间片,故而不是书中所写的交替出现,如果你的次数足够多,可以看到交替。

不错! --------------------编程问答--------------------
引用 3 楼  的回复:
把for(int i=0;i<10;i++)改成while(true)

也行 --------------------编程问答-------------------- --------------------编程问答-------------------- 把i的指增大,在输出的时候,给线程加上编号:


public class ThreadDemo9_1
{
  public static void main(String args[])
  {
  new TestThread().start();
for(int i=0;i<30;i++)
{
System.out.println("main 线程运行"+i);
 
}
 
   
  }
  
}

class TestThread extends Thread
{
  public void run()
  {
   
for(int i=0;i<30;i++)
{
System.out.println("TestThread 线程运行"+i);
 
}
 
  }

}
这样就可以体现线程执行时的随机性: --------------------编程问答-------------------- 可是书上就是10次啊 --------------------编程问答--------------------
引用 6 楼  的回复:
支持屁哥,拥戴屁哥


要爆你菊花!!!!!!!!! --------------------编程问答-------------------- 书上骗人的实践才是主要的,不过要是你运气好可能也会出现。 --------------------编程问答--------------------
引用 10 楼  的回复:
书上骗人的实践才是主要的,不过要是你运气好可能也会出现。



........... --------------------编程问答-------------------- 我把 i 改成了 10000, 好像是有交替出现,但是并不是 main 和 TestThread 

一行一行的交替出现,而是一整块一整块的交替出现! --------------------编程问答-------------------- 循环少   单个时间片内就能完成整个循环  你可以加个sleep(1000) 也是可以的 两种方法
--------------------编程问答-------------------- 多线程,书上的结果能信吗?每次结果很肯能都是不一样的,以实际情况为准 --------------------编程问答-------------------- 线程间不是一人执行一遍,结果是完全随机的! --------------------编程问答-------------------- P 哥 被书骗了 --------------------编程问答-------------------- 呵呵,出书的人骗你呢,其实也是为了你好。不然要循环1W次,难道他要在书上列1万个数字啊 --------------------编程问答-------------------- 睡一会,就好了 --------------------编程问答-------------------- 因为很快就执行完了。。循环多加点。 --------------------编程问答-------------------- 楼主是刚学多线程吧? --------------------编程问答--------------------
引用 20 楼  的回复:
楼主是刚学多线程吧?


N年前学过又扔了N年。。。 --------------------编程问答-------------------- 计算机运算这种问题是很快的,弄不好出书的那个人用的还是86呢
一转眼的事。
你要是想看效果。
就在主线程和run方法没执行一遍就中sleep一下 --------------------编程问答-------------------- 程序没有问题 可能是你看见的结果是Thread一抢到了执行权 一下就把它全部执行完了,你多试几次 或者把循环的次数改的大些就可以看见了 --------------------编程问答-------------------- 你的书是哪年的?机器那么不行,现在计算机处理能力都提升了,一个时间片内就可以把你的10次执行完成,而且很轻松。如果你要问为什么他要先执行main中的再执行thread中的,那么这个问题就要去看一下线程的调度了。你去new一个对象,总要去做一定的准备,获取足够的资源成为一个线程,然后再去调度吧。 --------------------编程问答-------------------- 现在都是四核的时代了,一个破输出瞬间执行完,哪还能交替了。 --------------------编程问答-------------------- 事件太短了 次数太少了 
补充:Java ,  Java SE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,