美文网首页
关于volatile的困惑

关于volatile的困惑

作者: 周群力 | 来源:发表于2020-05-03 19:03 被阅读0次

volatile vs AtomicReference 有何区别?

区别就是后者支持CAS,其他都一样。
Java volatile reference vs. AtomicReference

image.png

我理解AtomicReference也要加上final或者volatile来保证安全发布。相关讨论:
https://www.baeldung.com/java-atomic-variables

对volatile变量的写是否happen before于对该变量的其他写操作?

java提供的happen before规则中对于volatile的表述是“对volatile变量的写happen before其他读操作”,即“写happen before读”,那么“写happen before写”么?
举个例子,假设有多个线程并发写一个volatile变量,两个写操作之间是否有隔离性(原子性)?会出现类似1.5之前double-check-locking的不一致问题么?

http://tutorials.jenkov.com/java-concurrency/volatile.html

image.png

what-happens-if-a-volatile-variable-is-written-from-2-threads

image.png

从网文来看,答案是写happen before写。如何理解呢?
直觉上的猜想:假如AB两线程都在写volatile变量,A写的过程中,B线程应该是看不到新值的内存地址(在B看起来,volatile变量一直引用的是旧对象的内存地址),当B能看到(读到)新内存地址的时候,也意味着A已经完成了全部写操作(因为写happen before读规则),后面B再做什么都不至于出现类似1.5前DCL不完全发布的问题了。

原理上的理解,猜测就是每个线程确保自己完成写操作的整个动作之后,才从cache将改动commit到内存,因此多线程之间写volatile变量天然具有隔离性。这只是猜测没去细看。

相关文章

  • 关于volatile的困惑

    volatile vs AtomicReference 有何区别? 区别就是后者支持CAS,其他都一样。Java ...

  • JMM之再看看Volatile

    Volatile 具体的可见内存可见性一文中volatile相关的知识。这里只扩充一点,关于volatile的内存...

  • 深入浅出java中volatile

    引言 这几天看了几篇关于java的volatile关键字的文章,今天就想总结一下关于volatile的相关知识巩固...

  • 关于volatile

    建议先看Java内存模型 作用 一个变量被volatile修饰之后即具有两层意义: 一个线程修改了某个变量的值,这...

  • 关于volatile

    并发中的三大特点,volatile的两个语义,分别针对了可见性和有序性 关键字volatile可以说是Java虚拟...

  • 关于volatile

    前言 volatile关键字可以说是JAVA比较难理解的一个关键字了,很多书感觉讲的都不太清楚。这篇博客主要梳理一...

  • 并发编程前传

    前言 以前在学习 C++ 关键字 volatile 的时候,看过阿里数据库大牛何登成关于 volatile 的文章...

  • Volatile面试

    今天面试的时候被一个问题卡主了,就是关于Volatile的问题: Q: 请简单介绍下Volatile这个关键字; ...

  • 你真的了解volatile关键字吗?

    volatile关键字经常在并发编程中使用,其特性是保证可见性以及有序性,但是关于volatile的使用仍然要小心...

  • 看了这篇文章,你还敢说你了解volatile关键字吗?

    volatile关键字经常在并发编程中使用,其特性是保证可见性以及有序性,但是关于volatile的使用仍然要小心...

网友评论

      本文标题:关于volatile的困惑

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