加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – volatile是否传播给实例成员?

发布时间:2020-12-15 04:28:47 所属栏目:Java 来源:网络整理
导读:假设有一些简单的容器声明并像这样实例化 class Test { private volatile ListObject list = new ArrayList();} ,读取和写入都由锁保护; synchronized关键字未使用.尽管Test.list被声明为volatile,但它的所有成员字段(如ArrayList.elementData)都不具有此修
假设有一些简单的容器声明并像这样实例化

class Test {
    private volatile List<Object> list = new ArrayList<>();
}

,读取和写入都由锁保护; synchronized关键字未使用.尽管Test.list被声明为volatile,但它的所有成员字段(如ArrayList.elementData)都不具有此修饰符.现在,在多线程应用程序中,它会像volatile容器一样吗?换句话说,某些线程提交给ArrayList.elementData的更改是否会被所有其他线程立即看到?

解决方法

一般的答案是否:volatile只在读取和写入引用变量之间建立一个先发生的关系.如果两个线程同时访问变量中引用的对象的内部字段,则仍然需要同步机制.

在您的情况下,最好的方法似乎使用同步列表,或java.util.concurrent包中的一些包装器.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读