同步类容器
同步类容器包括Vector和Hashtable,二者是早期JDK的一部分,此外还包括在JDK1.2中添加的一些功能相似的类,这些同步的封装器类是由Collections.synchronizedXxx等工厂方法创建的。这些类实现线程安全的方法是:将它们的状态封装起来,并对每个公有方法都进行同步,使得每次只有一个线程能访问容器的状态。
Vector和Hashtable早已经过时,很少使用它们,来看简单看以下其源码
1、Vector:
①底层实现是数组
②初始化容量是10
③作为线程安全的容器,是因为在方法上都加上了synchronized
④扩容因子是可以指定的,默认是0。若果扩容因子大于0,新容量是原来的容量加扩容因子,如果小于等于0,是原来的2倍。
2、Hashtable:
①底层是Hashtable.Entry数组,而Entry是一个单项链表
②初始化容量11,加载因子0.75
③作为线程安全的容器,是因为在方法上都加上了synchronized
④不可以是null的key和value
⑤扩容是原来的二倍,最大不能超过限定值
3、Collections.synchronizedXxx
我们经常使用的ArrayList、HashMap等线程不安全的容器都可以通过该方法编程线程安全的容器。
List<String> list = Collections.synchronizedList(new ArrayList<String>());
Set<String> set = Collections.synchronizedSet(new HashSet<String>());
Map<String, String> map = Collections.synchronizedMap(new HashMap<String, String>());