天天看点

同步类容器

同步类容器

        同步类容器包括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

同步类容器

       ⑤扩容是原来的二倍,最大不能超过限定值

同步类容器
同步类容器
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>());