看HeadFirtJava中有一個很有趣的例子能夠顯示出線程排程的一個不可預見性,看下面的demo
public class TestDemo {
public static void main(String[] args) {
MyRunnable myRunnable = new MyRunnable();
Thread thread = new Thread(myRunnable);
thread.start();
System.out.println("主方法執行。。。");
}
}
class MyRunnable implements Runnable {
@Override
public void run() {
go();
}
private void go() {
doMore();
}
private void doMore() {
System.out.println("你說神奇不神奇");
}
}
輸出結果1:main()啟動新線程;排程器把主線程擱置以執行新的線程,排程器執行一下新線程就回到主線程,排程器回到新的線程繼續執行,再度回到主線程執行列印輸出(機器的性能很重要);最後,新線程執行到最後。
主方法執行。。。
你說神奇不神奇
輸出結果2:
main()方法啟動新線程;排程器擱置主線程以便執行新線程;新線程列印輸出“
你說神奇不神奇。。。
”;執行主線程。
你說神奇不神奇
主方法執行。。。