JMM一致性协议

JMM中一些普通变量的操作指令

A、Load操作发生在read之后(两个之间可以有其他的指令)
B、普通变量的修改未必会立即发生Store操作,但发生Store操作,就会发生write操作

最细的粒度支持,也就是对Load、Store的各种顺序控制,load、store两两组合为4中情况,LoadLoad、StoreStore、LoadStore、StoreLoad。它们以一种指令屏障的方式来控制顺序。有些系统可能不支持某些指令的顺序化,不过,绝大多数系统都支持StoreLoad指令。

StoreLoad的意思

可以简单理解为Store优先于Load发生。例如两个在某个瞬间同时修改和读取主存中的一个共享变量,此时的读取操作将发生在修改之后。有了这样一个特征,就实现了最细粒度的锁,也是最轻量级的锁。

不过这样的方式能保证读的一瞬间确保线程读取到最新的数据,因此要进一步做到读取、修改、写入动作是一致的,就将其升级为原子性。要达到原子性的效果,可以通过可见性、CAS自旋来完成,也可以通过synchronized来完成。

你可能感兴趣的:(concurrency,java)