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的,这是什么原因?

解决方案 »

  1.   

    循环次数太少了,看不出效果。
    可以多试几遍。
    或把循环次数改大一点 , 例如 写成  i < 10000
      

  2.   

    因为两个线程你可以相比于2个程序,这两个程序去抢占CPU,根据优先级等分配时间片,故而不是书中所写的交替出现,如果你的次数足够多,可以看到交替。
      

  3.   

    把for(int i=0;i<10;i++)改成while(true)
      

  4.   

    把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);
     
    }
     
      }}
    这样就可以体现线程执行时的随机性:
      

  5.   

    我把 i 改成了 10000, 好像是有交替出现,但是并不是 main 和 TestThread 一行一行的交替出现,而是一整块一整块的交替出现!
      

  6.   

    循环少   单个时间片内就能完成整个循环  你可以加个sleep(1000) 也是可以的 两种方法
      

  7.   

    计算机运算这种问题是很快的,弄不好出书的那个人用的还是86呢
    一转眼的事。
    你要是想看效果。
    就在主线程和run方法没执行一遍就中sleep一下
      

  8.   

    程序没有问题 可能是你看见的结果是Thread一抢到了执行权 一下就把它全部执行完了,你多试几次 或者把循环的次数改的大些就可以看见了
      

  9.   

    你的书是哪年的?机器那么不行,现在计算机处理能力都提升了,一个时间片内就可以把你的10次执行完成,而且很轻松。如果你要问为什么他要先执行main中的再执行thread中的,那么这个问题就要去看一下线程的调度了。你去new一个对象,总要去做一定的准备,获取足够的资源成为一个线程,然后再去调度吧。