天天看点

线程调度器的不可预见性

看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()方法启动新线程;调度器搁置主线程以便执行新线程;新线程打印输出“

你说神奇不神奇。。。

”;执行主线程。

你说神奇不神奇
主方法执行。。。