Vector和Hashtable源码阅读与理解
2018-01-09 10:00
405 查看
Vector是线程安全的ArrayList:
Hashtable是线程安全HashMap:
原理就是在方法级别上锁,对于高并发的支持并不是很好。所以有了J.U.C包下的ConcurrentHashMap阅读与理解来支持多线程下HashMap的高并发操作。而多线程下的队列操作由J.U.C下的ArrayBlockingQueue阅读与理解来处理。
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阅读与理解来处理。
相关文章推荐
- FutureTask源码阅读与理解
- 理解ThreadPoolExecutor源码(二)execute函数的巧妙设计和阅读心得
- JAVA 集合类(java.util)源码阅读笔记------Hashtable
- AbstractQueuedSynchronizer源码阅读与理解
- JDK1.8源码阅读系列之三:Vector_1
- Deep Compression阅读理解及Caffe源码修改
- 黑马程序员【阅读源码理解String对象的不变性】
- chromium源码阅读(3)-scoped_vector
- jquery源码阅读知识储(8)Javascript引用和作用域的理解
- [Chrome源码阅读] 理解Chrome导航网址的流程及render进程启动模式
- List、Map、Set的理解(LinkedList和ArrayList、Vector和ArrayList、HashMap和HashTable和HashSet区别与使用)
- kubernetes源码之watch包until.go阅读理解四
- JDK源码阅读Vector
- 源码阅读之Vector
- [SDS阅读理解/9]源码中的函数/6
- Android源码阅读与理解(一):开篇
- STL源码阅读-hashtable
- hadoop源码阅读之mapreduce再理解
- Open vSwitch源码阅读【转】及自己的理解【稍后更新】