【发布时间】:2016-03-15 15:50:01
【问题描述】:
源码在这里:
public E set(int index, E element) {
final ReentrantLock lock = this.lock;
lock.lock();
try {
Object[] elements = getArray();
E oldValue = get(elements, index);
if (oldValue != element) {
int len = elements.length;
Object[] newElements = Arrays.copyOf(elements, len);
newElements[index] = element;
setArray(newElements);
} else {
// Not quite a no-op; ensures volatile write semantics
setArray(elements);
}
return oldValue;
} finally {
lock.unlock();
}
}
但我认为if-else 块可以更简洁如下:
if (oldValue != element) {
elements[index] = element;
}
请帮我解决这个问题,在此先感谢。
【问题讨论】:
-
@MarounMaroun 但似乎所有函数都使用
lock,所以我认为线程安全应该不是问题。 -
有关 COWAL.set() 为何以这种方式编码的更多信息,请参阅stackoverflow.com/a/28777239/1441122
标签: java data-structures collections