我有一个非常微不足道的基本问题,为什么ConcurrentHashMap的设计不像CopyOnWriteArrayList?如果你查看CopyOnWriteArrayList的源代码,代码是这样的。
public boolean add(E e) {
final ReentrantLock lock = this.lock;
lock.lock();
try {
Object[] elements = getArray();
int len = elements.length;
Object[] newElements = Arrays.copyOf(elements, len + 1);
newElements[len] = e;
setArray(newElements);
return true;
} finally {
lock.unlock();
}
}
我们不能像这样编写ConcurrentHashMap
public boolean add(E e) {
final ReentrantLock lock = this.lock;
lock.lock();
try {
hm.put("<Object>" , "<Object>");
return true;
} finally {
lock.unlock();
}
}
如果我们这样做,会出现什么问题,他们(Sun / Oracle Java设计人员)试图解决简单的多线程问题是什么?
为什么在ConcurrentHashMap的情况下以不同的方式设计hashcode和hash函数?为什么他们(Sun / Oracle Java设计者)不遵循为HashMap设计的普通hash()函数?