美文网首页
Java中Volatile和synchronized

Java中Volatile和synchronized

作者: 康俊1024 | 来源:发表于2019-04-20 22:26 被阅读0次

    JMM

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

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

    线程之前如何通信

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

    线程之间如何同步

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

    定位内存可见性问题

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


    synchronized.jpg

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

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


      JMM.jpg

    相关文章

      网友评论

          本文标题:Java中Volatile和synchronized

          本文链接:https://www.haomeiwen.com/subject/ascrgqtx.html