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