我遇到了一个非常奇怪的问题,Java 线程忙于等待。
我有一个线程忙于等待其他线程的静态变量的状态。假设忙等待的线程正在等待另一个线程的静态 int 变量达到某个值
while(OtherThread.countInt < 5);
如果我使用上面的代码,线程将被卡住,等待并且不会跳出 while 循环,即使static int countInt
达到 5。
while(OtherThread.countInt < 5) {
// waste some time doing meaningless work
}
但是,如果我使用这个其他代码,那么线程确实会脱离忙等待循环。有时,countInt
一到5,其他时候稍等片刻。但它发生了。对于我的特定示例,我将其用作“无意义的工作”
print("busy waiting...",1000) // wasting time doing meaningless work
我定义print
为synchronzied static void print(String s, int n)
打印字符串s
然后休眠n
几毫秒。
是什么赋予了?为什么线程忙于等待第一个代码,而不是另一个?所有线程都有相同的优先级,所以它不能是一个优先级问题。