Java中Volatile和synchronized

JMM

内存模型:Java Memory Model
问题:并发过程中如何处理可见性 原子性和有序性问题

并发编程中两个关键问题:

线程之前如何通信

  • 共享内存 - 隐式通信
  • 消息传递 - 显式通信

线程之间如何同步

  • 在共享内存的并发模型中,同步是显式的;synchronized
  • 在消息传递的并发模型中,由于消息发送必须在消息接收之前,所以同步时隐式

定位内存可见性问题

什么对象是内存共享的,什么不是
synchronized: 可重入锁 互斥性 可见性


synchronized.jpg

Volatile: 可以做到原子性 可见性;不能做到复合操作的原子性;i++
Volatile int x = 0;

  • 对于声明了Volatile的变量进行写操作的时候,JVM会像处理器发送一条Lock前缀的指令。会把这个变量所在的缓存行的数据写回到系统内存
  • 对于多处理器的情况下,保证各个处理器缓存一致性的特点,就会实现缓存一致性协议


    JMM.jpg
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容