根据定义,线程是并行运行的,并且没有任何优先级高于其他线程。
一旦线程全部启动,本质上是随机的,它将首先运行,通常,第一个启动的线程将具有轻微的“领先优势”,但是与启动线程等的开销相比,该优势很小。
您的特定环境的怪癖恰好偏向于使用一个线程,结果在不同的系统上可能会有所不同,因此当然不应该依赖它。
顺便说一句,这是不好的做法,原因有很多:
public Caller (CallMe target, String msg) { this.target = target; this.msg = msg; t = new Thread(this); t.start();}(实际上您可能会收到编译器警告)。
更好的是提供一种启动方法
public Caller start() { t.start(); return this;}然后做
new Caller(target, msg).start();
这绝对可以确保Thread对象开始处理之前,Caller对象已完全初始化并准备就绪。



