有段程序如下:
public class ThreadDemo
{
  public static void main(String[] args)
{
  TestThread t=new TestTread();
  new Thread(t).start();
  for(int i=0;i<10;i++)

  System.out.println("main is running!");
}
}
}class TestThread implements Runnable
{
 public void run(){
 for(int i=0;i<10;i++)
{
 System.out.println("Thread is running!"); 
}
}
}
书本例题上的输出是main与Thread交替输出,在机器上实践是main输出10个之后才输出Thread。问题出在哪里?

解决方案 »

  1.   

    线程的执行是随机的,也就是说由系统随机调度,那个先执行,取决于系统给哪个先分配CPU
    如果想看交错效果,可以给每个执行的地方加入slepp来人为干涉CPU分配
    public class ThreadDemo
    {
      public static void main(String[] args)
    {
      TestThread t=new TestTread();
      new Thread(t).start();
      for(int i=0;i<10;i++)
    {  
      System.out.println("main is running!");
      try {Thread.sleep(100);} cathc (Exception e) {}}
    }
    }class TestThread implements Runnable
    {
     public void run(){
     for(int i=0;i<10;i++)
    {
     System.out.println("Thread is running!");  
     try {sleep(100);} cathc (Exception e) {}}
    }
    }
      

  2.   

    cpu决定要执行线程时是随机的 并且是以时间片得概念来执行的 不一定会一次将一个线程执行完得