HashMap和Vector都是线程安全类,接下来看下JDK是如何实现线程安全类的。
1、HashMap和Vector容器的实现都是数组,代码如下:
HashMap: /** * The hash table data. */ private transient Entry[] table; Vector: protected Object[] elementData;
2、对这两个数据的访问,封闭在HashMap和Vector的类的方法里面,并且类中方法都是用了内部锁(this的所,方法上都加了synchronized关键字),例如Vector SetSize方法。
public synchronized void setSize(int newSize) { modCount++; if (newSize > elementCount) { ensureCapacityHelper(newSize); } else { for (int i = newSize ; i < elementCount ; i++) { elementData[i] = null; } } elementCount = newSize; }