为什么Sun / Oracle Developers设计了像CopyOnWriteArrayList一样的ConcurrentHashMap?

时间:2015-09-10 10:15:08

标签: hashmap concurrenthashmap

我有一个非常微不足道的基本问题,为什么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()函数?

0 个答案:

没有答案