我知道同步可以用于强制由多个线程更新的变量可见性。即假设我们有两个线程共享的变量。如果我们在一个线程中对其进行更新,则除非我们正确同步对该变量的访问,否则不能保证另一个线程看到新更新的值。

但是我想知道幕后到底是什么导致了这一点。有人可以让我知道吗?

非常感谢。

最佳答案

还有许多其他方法来确保可见性,例如易失性,有序/惰性集。

当您输入同步块时,它将执行读取屏障。这意味着所有读取将保持一致。退出同步块时,它将执行写屏障。这样可以确保所有写入均保持一致的顺序。如何完成此操作的实际详细信息由CPU确定,但是对于x86 / x64,它是单个机器代码指令或前缀。

关于java - 为什么Java中的同步保留了由多个线程更新的状态的可见性,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20252585/

10-11 09:31