下面的代码输出pingpong,我不太明白为什么这个 System.out.print 会在 t.start之前输出
我的想法是 应该会随机输出 pongping和pingpong,应该没有顺序的才对呀。。
public class Test2 {
public static void main(String args[]) {
Thread t = new Thread() {
public void run() {
pong();
}
};
t.start();
System.out.print("ping");
}
static void pong() {
System.out.print("pong");
}
}
Thread.start() 只是设定新线程进入 “就绪” 状态,等待 CPU 调度之后才会执行。
而下一个 System.out.print() 几乎(概率大于99%)可以认为是立即接着执行的。
所以,最终效果就是,几乎都是 pingpong。
CPU 执行一条指令的时间,几乎可以忽略,基本是微秒级左右。
CPU 调度切换的时间间隔,基本在毫秒级以上。
这两个时间的比值跟环境有关,但是明显是相当大的(不可能在切换上,消耗太多时间,浪费资源)。
不同的 JAVA 版本,虚拟机,配置,可能效果不一定(编译优化、指令乱序、垃圾回收等等问题)。
但是,主线程的下一条指令,比新线程的第一条指令要快,基本是可以确定的。
没有什么 “随机” 一说。