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并继续运行主线程,你能为我解释输出吗?
提前谢谢。
答案 0 :(得分:2)
System.out.println
是一种同步方法,当一个线程抓取一个锁时,它会优先获取锁。在这种情况下,main
设法获得锁定并继续获取它,直到主循环结束。如果再次运行此命令,则可能会以不同的顺序获得输出。