阅读本DZone article关于Java并发我在想,如果下面的代码:Java中的volatile变量问题
private volatile List list;
private final Lock lock = new ReentrantLock();
public void update(List newList) {
ImmutableList l = new ImmutableList().addAll(newList);
lock.lock();
list = l;
lock.unlock();
}
public List get() {
return list;
}
等同于:
private volatile List list;
public void update(List newList) {
ImmutableList l = new ImmutableList().addAll(newList);
list = l;
}
public List get() {
return list;
}
在try {}最后{}块被省略简洁。我假设ImmutableList类是一个真正不可变的数据结构,它拥有自己的数据,例如google-collections库中提供的数据。由于list变量是不稳定的,基本上发生的是一个即时拷贝,跳过使用锁定不是安全的吗?
我认为两者都应该表现得完全一样,但它取决于'ImmutableList'的实施。 我期望在'ImmutableList'上调用'addAll()'会抛出一个Exception,所以锁永远不会被使用。 – 2010-02-03 21:43:07