天天看點

線程排程器的不可預見性

看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()方法啟動新線程;排程器擱置主線程以便執行新線程;新線程列印輸出“

你說神奇不神奇。。。

”;執行主線程。

你說神奇不神奇
主方法執行。。。