测试代码:
public class ThreadTest {
public static void main(String[] args) throws InterruptedException {
for (int i = 0; i < 10; i++) {
System.out.println("主线程正在执行(新线程开启之前)" + i);
// 让线程睡眠,便于看出线程之间的切换
Thread.sleep(10);
}
new Thread() {
@Override
public void run() {
for (int i = 0; i < 10; i++) {
System.out.println("新线程正在执行" + i);
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}.start();
for (int i = 0; i < 10; i++) {
System.out.println("主线程正在执行(新线程开启之后)" + i);
Thread.sleep(10);
}
}
}
运行结果:
主线程正在执行(新线程开启之前)0
主线程正在执行(新线程开启之前)1
主线程正在执行(新线程开启之前)2
主线程正在执行(新线程开启之前)3
主线程正在执行(新线程开启之前)4
主线程正在执行(新线程开启之前)5
主线程正在执行(新线程开启之前)6
主线程正在执行(新线程开启之前)7
主线程正在执行(新线程开启之前)8
主线程正在执行(新线程开启之前)9
主线程正在执行(新线程开启之后)0
新线程正在执行0
新线程正在执行1
主线程正在执行(新线程开启之后)1
主线程正在执行(新线程开启之后)2
新线程正在执行2
主线程正在执行(新线程开启之后)3
新线程正在执行3
主线程正在执行(新线程开启之后)4
...
可以看出,Java程序一定是从上到下依次执行的。尽管有新线程,也仍要等到执行到start语句才会开启。