Tag: 内存可见性

线程之间是否共享静态variables?

我在一个高级Java线程课程的老师说了一些我不确定的东西。 他表示下面的代码不一定会更新readyvariables。 据他介绍,这两个线程不一定共享静态variables,特别是在每个线程(主线程与ReaderThread)在其自己的处理器上运行并且因此不共享相同的寄存器/caching/等等的情况下CPU不会更新其他。 基本上,他说有可能在主线程中更新了ready ,而不是在ReaderThread中,所以ReaderThread将无限循环。 他还声称,程序可以打印“0”或“42”。 我明白'42'是怎么打印的,但不是'0'。 他提到这是numbervariables设置为默认值时的情况。 我想也许不能保证在线程之间更新静态variables,但这让我觉得Java非常奇怪。 ready挥霍纠正这个问题吗? 他展示了这个代码: public class NoVisibility { 私有静态布尔准备好; 私人静态诠释数字; 私有静态类ReaderThread扩展Thread { public void run(){ while(!ready)Thread.yield(); 的System.out.println(数); } } public static void main(String [] args){ new ReaderThread()。start(); 数字= 42; ready = true; } }