我知道同步可以用于强制由多个线程更新的变量可见性。即假设我们有两个线程共享的变量。如果我们在一个线程中对其进行更新,则除非我们正确同步对该变量的访问,否则不能保证另一个线程看到新更新的值。
但是我想知道幕后到底是什么导致了这一点。有人可以让我知道吗?
非常感谢。
最佳答案
还有许多其他方法来确保可见性,例如易失性,有序/惰性集。
当您输入同步块时,它将执行读取屏障。这意味着所有读取将保持一致。退出同步块时,它将执行写屏障。这样可以确保所有写入均保持一致的顺序。如何完成此操作的实际详细信息由CPU确定,但是对于x86 / x64,它是单个机器代码指令或前缀。
关于java - 为什么Java中的同步保留了由多个线程更新的状态的可见性,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20252585/