美文网首页
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的实现原理

    java 高并发中volatile的实现原理 摘要: 在多线程并发编程中synchronized和Volatile...

  • volatile关键字

    java中关键字volatile的作用; volatile vs synchronized的区别 Java并发编...

  • Java中的volatile

    Java中的volatile 在多线程并发编程中Synchronized 和 Volatile都扮演者重要的角色,...

  • java并发之volatile

    在Java并发编程中,volatile和synchronized都扮演者重要的角色。volatile又被成为轻量级...

  • Java面试之volatile和synchronized及Loc

    面试中经常会遇到以下的问题:Java中的volatile和synchronized的区别?Java中的Lock和s...

  • Java中Volatile和synchronized

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

  • 【同步】

    java中的volatile和synchronized 一个volatile类型的变量不允许线程从主内存中将变量的...

  • 总结

    java基础 Java中多态的理解 反射 Java序列化与反序列化 Volatile和Synchronized e...

  • Java基础-浅析解决并发的几种方式

    前言 在上一篇中,我们讨论了Java中的关键字volatile和synchronized Java基础-浅谈关键字...

  • 6

    Java内存模型定义了Java语言中的synchronized、volatile和final等关键词对主存中变量读...

网友评论

      本文标题:Java中Volatile和synchronized

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