美文网首页
解读volatile

解读volatile

作者: 菜鸟欧 | 来源:发表于2017-06-15 08:55 被阅读0次

1.volatile初认识

Volatile 具有可见性和原子性。可见性对于一个volatile变量的读,总是能看到对这个变量最后的写入,原子性对任意单个变量的读写具有原子性,到类似++这种复合操作不具有原子性。

volatile写读建立在happens-before关系上,可以实现线程之间通信。volatile的写-读与锁的释放-获取相同,volatile写与锁的释放对应,读与锁的获取对应。

volatile写时,java并发控制会把该线程对应的本地内存中的变量刷新到主内存中。写线程向其它读线程发送消息。

volatile读时,java内存模型JMM会把本地内存设置为无效,并把主内存的数据读取到本地共享变量中。读线程接受写线程发送的消息。

写线程通过主内存向读线程发送消息实现线程之间通信。

2.volatile内存语义实现

重排序是为了提高性能,编译器和处理器会对相应的指令做重排序。分为编译器优化重排序,指令级并行重排序,内存系统重排序。

当第二个操作是volatile写时,不管前面是什么操作都不能重排序,这个规则确保了volatile写之前的操作都不能被编译器重排序到volatile写之后。

当第一个操作为volatile读时,不管后面是操作都不能重排序。这个规则确保volatile读之后的操作不会被编译器优化重排序到volatile读之前。

当一个操作为写时,第二个为读不能重排序。

编译器采用内存屏障来禁止重排序。

相关文章

  • volatile关键字小总结

    本文内容:1.volatile语义2.由volatile语义引出JMM3.volatile不能保证原子性的解读4....

  • 解读volatile

    1.volatile初认识 Volatile 具有可见性和原子性。可见性对于一个volatile变量的读,总是能看...

  • java volatile解读

    在网上搜索了一下volatile,文章一大堆,但是能真正理解volatile的含义的不多,更有甚者,仅仅是作者个人...

  • Java volatile解读

    一、开篇 在上一篇文章《Java 锁》里,我们着重介绍了解决多线程在访问同一共享资源时,并发操作产生的数据不安全的...

  • Volatile关键字解读

    并发的由来 JAVA内存模型规定了所有变量第一存储在主内存中,每个线程都有自己的工作内存。 每个线程都保存该线程用...

  • Volatile理解

    Java Volatile1. volatile 理解2. volatile 不保证原子性3. Volatile ...

  • java多线程关键字volatile、lock、synchron

    一、volatile volatile写和volatile读的内存语义: 线程A写一个volatile变量,实质上...

  • java多线程关键字volatile、lock、synchron

    一、volatile volatile写和volatile读的内存语义: 线程A写一个volatile变量,实质上...

  • volatile学习

    目录:1.volatile是什么2.volatile的作用3.volatile的原理4.volatile与sync...

  • Java Volatile transient 关键字

    Java Volatile transient 关键字 java关键字volatile Volatile修饰的成员...

网友评论

      本文标题:解读volatile

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