同步类容器

同步类容器

        同步类容器包括Vector和Hashtable,二者是早期JDK的一部分,此外还包括在JDK1.2中添加的一些功能相似的类,这些同步的封装器类是由Collections.synchronizedXxx等工厂方法创建的。这些类实现线程安全的方法是:将它们的状态封装起来,并对每个公有方法都进行同步,使得每次只有一个线程能访问容器的状态。

        Vector和Hashtable早已经过时,很少使用它们,来看简单看以下其源码

        1、Vector:

        ①底层实现是数组

        86a34a7b7573e9a3d7a87c087a0b27e4b4e.jpg

    ②初始化容量是10

        82bf8f64c4b7a45f72ba660de723607f7cf.jpg

    ③作为线程安全的容器,是因为在方法上都加上了synchronized

        39a0a71c33f6b7b3819c7be8b2f909dafdd.jpg

④扩容因子是可以指定的,默认是0。若果扩容因子大于0,新容量是原来的容量加扩容因子,如果小于等于0,是原来的2倍。

        51392df775097fad0980331107faa78413a.jpg

        7dbc4cfcdbce70bf76eab599efff2d1347e.jpg

 

        2、Hashtable:

        ①底层是Hashtable.Entry数组,而Entry是一个单项链表

        e04adc773b01b4263d9305e5f0cf12f4b3a.jpg

        c346962342e5a7634d5b770ac417137c61e.jpg

        ②初始化容量11,加载因子0.75

        93ee1c660007bd2b4d698b9ae4cace4d695.jpg

       ③作为线程安全的容器,是因为在方法上都加上了synchronized

       ④不可以是null的key和value

        10a48cffae92a4fe9c8ff049d1fbf25bac7.jpg

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

        2cc2e197cc5c5159dfc6e88b256ba8081fd.jpg

        999043757f56c57103729b252efcc1f0e7d.jpg

        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>());

    

转载于:https://my.oschina.net/caofanqi/blog/3004610

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值