【发布时间】:2016-07-24 02:59:44
【问题描述】:
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
我对线程运行的顺序感到困惑。当 new ThreadTest.start 时,它将首先运行 run() 方法。但是为什么它输出0并继续运行主线程,你能为我解释一下输出吗?
提前谢谢你。
【问题讨论】:
-
线程顺序由线程调度器决定。不是程序员。
-
两者都将并行运行尝试在两个循环中添加
Thread.sleep(1000);并查看结果。
标签: java multithreading main