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包中的一些包装器. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容