我无法理解程序执行的顺序。
public class sub {
public static void main(String args[])
{
base b1 = new base();
b1.s="b1";
b1.start();
base b2 = new base();
b2.s="b2 ";
b2.start();
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public class base extends Thread{
String s;
@Override
public void run() {
for(int i=0;i<5;i++)
{
System.out.println(s+" "+i);
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
// TODO Auto-generated method stub
}
}
输出
b2 0
b1 0
b2 1
b1 1
b2 2
b1 2
b1 3
b2 3
b2 4
b1 4
有人可以解释为什么输出按此顺序排列。为什么第一个b2在b1之前执行而在b2之前不是b1。那么为什么b1首先执行。
答案 0 :(得分:0)
无法保证在另一个线程之前选择一个线程。在这种情况下,可能发生的是调度程序试图避免上下文切换,因此它将尝试保持主线程运行。此外,启动新线程需要时间。也许当主线程进入休眠状态时,b1和b2都会启动,它们首先开始运行,并且选择获取stdout打印流上的锁定,这两者都是任意选择。