您的位置:首页 > 其它

Vector和Hashtable源码阅读与理解

2018-01-09 10:00 405 查看
Vector是线程安全的ArrayList:

public synchronized void insertElementAt(E obj, int index) {
modCount++;
if (index > elementCount) {
throw new ArrayIndexOutOfBoundsException(index
+ " > " + elementCount);
}
ensureCapacityHelper(elementCount + 1);
System.arraycopy(elementData, index, elementData, index + 1, elementCount - index);
elementData[index] = obj;
elementCount++;
}


Hashtable是线程安全HashMap:

public synchronized V put(K key, V value) {
if (value == null) {
throw new NullPointerException();
}
Entry<?,?> tab[] = table;
int hash = key.hashCode();
int index = (hash & 0x7FFFFFFF) % tab.length;
@SuppressWarnings("unchecked")
Entry<K,V> entry = (Entry<K,V>)tab[index];
for(; entry != null ; entry = entry.next) {
if ((entry.hash == hash) && entry.key.equals(key)) {
V old = entry.value;
entry.value = value;
return old;
}
}
addEntry(hash, key, value, index);
return null;
}


原理就是在方法级别上锁,对于高并发的支持并不是很好。所以有了J.U.C包下的ConcurrentHashMap阅读与理解来支持多线程下HashMap的高并发操作。而多线程下的队列操作由J.U.C下的ArrayBlockingQueue阅读与理解来处理。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: