【发布时间】:2015-07-12 10:59:20
【问题描述】:
假设有一些像这样声明和实例化的简单容器
class Test {
private volatile List<Object> list = new ArrayList<>();
}
,对其的读写都有锁保护; synchronized 关键字未使用。尽管Test.list 被声明为 volatile,但它的成员字段(如ArrayList.elementData)都没有这个修饰符。现在,在多线程应用程序中,它的行为会像 volatile 容器吗?换句话说,某个线程提交给ArrayList.elementData的更改是否会立即被所有其他线程看到?
【问题讨论】:
-
添加到下面的答案中,根据用例,您可能还需要考虑
AtomicReferenceArray。
标签: java multithreading volatile