Java并发编程

Java并发机制底层实现原理-volatile

2018-04-29  本文已影响12人  markfork

章节目录

1.volatile的实现原理与应用

Java source code->Java class->JVM->汇编指令->cpu执行
java中使用的并发机制依赖于JVM实现和cpu指令。

1.1 volatile应用

volatile-保证可见性

volatile 是轻量级 synchronized,在多处理器并发中保证了共享变量的"可见性"。
可见性含义:
当一个线程修改共享变量时,另一个线程能立即读到这个修改的值。

volatile-执行成本低

volatile不会引起线程上下文的切换和调度。
使用合适,volatile的使用代价会比synchronized小。

volatile 如何保证可见性

class A{
   private volatile Singleton instance ;
   public A(){
        instance = new Singleton();
   }
}

转成汇编代码,如下:
movb, lock add1
上述对volatile共享变量instance进行写操作的时候会多出第二行汇编代码,Lock前缀的指令在多核处理器下会引发两件事情。

注意:在多处理器下,为了保证各个处理器缓存是一致的,就会实现缓存一致性协议
缓存一致性协议

每个处理器通过嗅探在总线上传播的数据来对比检查自己缓存的值是否过期
了,当处理器发现自己缓存行对应的内存地址中的值被修改,就会将当前处理
器的缓存行设置为无效状态,当其他处理器对这个共享变量进行修改操作时,
会重新从系统内存中把数据都到处理器缓存行当中。

volatile两条实现原则

1.锁总线+独占任何共享内存
2.缓存锁定+缓存一致性协议
每个处理器通过嗅探在总线上传播的数据来对比检查自己缓存的值是否过期
了,当处理器发现自己缓存行对应的内存地址中的值被修改,就会将当前处理
器的缓存行设置为无效状态,当其他处理器对这个共享变量进行修改操作时,
会重新从系统内存中把数据都到处理器缓存行当中。
上一篇下一篇

猜你喜欢

热点阅读