2016-04-04 21 views
0
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并继续运行主线程,你能为我解释输出吗?

预先感谢您。

+5

由线程调度程序决定的线程顺序。不是程序员。 –

+1

两者都会并行尝试在两个循环中添加'Thread.sleep(1000);'并查看结果。 – Kaushal28

回答

2

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

+0

哦,我明白了。谢谢彼得 – codemonkey

相关问题