public class ww
{
  public static void main(String[] args) 
 { 
  new TestThread().start();
 
  for(int i=1;i<21;i++)
  {
  System.out.println("第一个线程");
  }
  
  
 } 
} class TestThread extends Thread
{
public void run()
{
for(int i=0;i<11;i++)
{
System.out.println("我的线程");
}
}
}
运行后出现的结果是:
第一个线程
第一个线程
第一个线程
第一个线程
第一个线程
第一个线程
第一个线程
第一个线程
第一个线程
第一个线程
第一个线程
第一个线程
第一个线程
第一个线程
第一个线程
第一个线程
第一个线程
第一个线程
第一个线程
第一个线程
我的线程
我的线程
我的线程
我的线程
我的线程
我的线程
我的线程
我的线程
我的线程
我的线程
我的线程
怎么会这样,“第一个线程”和“我的线程“交替输出吗??

解决方案 »

  1.   

    这是JVM系统调度的事,
    当你调入new TestThread().start(); 时,需要一定的时间间隔,
    这样系统会空闲,所以会交替输出.
      

  2.   

    main Thread和new TestThread()先后执行的问题,不加控制的话出什么都有可能的。
      

  3.   

    在循环里面加上Thread.sleep();因为启动线程是需要时间的,所以... 你的主线程运行的太快了,呵呵呵!
    public class tt {
      public static void main(String[] args) {
        new TestThread().start();
        for (int i = 1; i < 21; i++) {
          try {
            Thread.sleep(10);
          } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
          }
          System.out.println("第一个线程");
        }
      }
    }class TestThread extends Thread {
      public void run() {
        for (int i = 0; i < 11; i++) {
          try {
            Thread.sleep(10);
          } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
          }
          System.out.println("我的线程");
        }
      }
    }
      

  4.   

    right 保证一个输出完毕另外一个才执行