什么是自己创建的线程和主线程运行顺序

时间:2016-04-04 14:02:54

标签: java multithreading main

public class ThreadTest extends Thread {
  public static void main(String[] args) {
    new ThreadTest().start();
    for (int i = 0; i < 10; i++) {
      System.out.format("%s %d\n", Thread.currentThread(), i);
    } 
  }
   public void run() {
     for (int i = 0; i < 10; i++) {
       System.out.format("%s %d\n", Thread.currentThread(), i);
     } 
   }
}

输出结果为:

Thread[Thread-0,5,main] 0
Thread[main,5,main] 0
Thread[main,5,main] 1
Thread[main,5,main] 2
Thread[main,5,main] 3
Thread[main,5,main] 4
Thread[main,5,main] 5
Thread[main,5,main] 6
Thread[main,5,main] 7
Thread[main,5,main] 8
Thread[main,5,main] 9
Thread[Thread-0,5,main] 1
Thread[Thread-0,5,main] 2
Thread[Thread-0,5,main] 3
Thread[Thread-0,5,main] 4
Thread[Thread-0,5,main] 5
Thread[Thread-0,5,main] 6
Thread[Thread-0,5,main] 7
Thread[Thread-0,5,main] 8
Thread[Thread-0,5,main] 9

我对线程运行的顺序感到困惑。当新的ThreadTest.start时,它将首先运行run()方法。但为什么它输出0并继续运行主线程,你能为我解释输出吗?

提前谢谢。

1 个答案:

答案 0 :(得分:2)

System.out.println是一种同步方法,当一个线程抓取一个锁时,它会优先获取锁。在这种情况下,main设法获得锁定并继续获取它,直到主循环结束。如果再次运行此命令,则可能会以不同的顺序获得输出。