new Thread(new Runnable() {
@Override
public void run() {
while (count < 100) {
synchronized (lock) {
if ((count & 1) == 0) {
System.out.println(Thread.currentThread().getName() + ":" + count++);
}
}
}
}
}, "偶数");
这是视频里打印偶数的线程代码。
这里while的条件是count < 100,注意到结果中出现了偶数:100,也就是说在count == 99时,该线程已经进入了while代码块。
有没有一种可能,偶数线程自打印完98后,再也没有被CPU调度,直到奇数线程打印完99后(此时count已经是100)才再次获取CPU,从而无法打印出100?
如果存在这种可能,那这段代码就是依赖于执行环境的。记得在哪里看过一句话好像是说,不应该对CPU的速度和数量做任何假设。
刚才跑了一个测试,发现确实有很小的概率出现打印不出来100的情况。