Vector(使用数组实现,线程同步)
Posted mr-ranx
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Vector(使用数组实现,线程同步)相关的知识,希望对你有一定的参考价值。
Vector与ArrayList集合一样,内部使用数组实现,不过它是线程同步的,同步的代码:
public Enumeration<E> elements() return new Enumeration<E>() int count = 0; public boolean hasMoreElements() return count < elementCount; public E nextElement() synchronized (Vector.this) if (count < elementCount) return elementData(count++); throw new NoSuchElementException("Vector Enumeration"); ;
同一时刻只能有一个线程能够编辑Vector,避免了多线程同时写不会出现我在ArrayList集合中所说的数组越界现象,但是同步需要花费较多的时间,所以增删的速度就慢,通过源码可以发现Vector在容量不够的时候,它默认扩展一倍的容量,扩容源码如下:
private void grow(int minCapacity) // overflow-conscious code int oldCapacity = elementData.length; int newCapacity = oldCapacity + ((capacityIncrement > 0) ? capacityIncrement : oldCapacity); if (newCapacity - minCapacity < 0) newCapacity = minCapacity; if (newCapacity - MAX_ARRAY_SIZE > 0) newCapacity = hugeCapacity(minCapacity); elementData = Arrays.copyOf(elementData, newCapacity);
以上是关于Vector(使用数组实现,线程同步)的主要内容,如果未能解决你的问题,请参考以下文章