为什么同步容器Vector与Hashtable逐步被淘汰

文章探讨了随着Java的发展,为何同步容器如Vector和Hashtable逐渐被淘汰,转而使用并发容器。同步容器通过全局锁实现线程安全,但影响并发性能。而并发容器如ConcurrentHashMap采用分段锁或节点锁策略,提高并发性并提供更安全的复合操作,成为多线程场景下的首选。
摘要由CSDN通过智能技术生成

前言

语言是会随着时代的发展而发展的,而Vector与Hashtable又是如何随着Java的发展而不再使用的呢?

同步容器

在Java发展的早期就在支持多线程了,也提供了一些线程安全的容器,比如在最早jdk1.2提供的集合容器类比如Vector、Hashtable,他们的实现机制都差不多,都是在方法层面上加synchronized关键字来实现线程安全。

在早期jdk还提供了Collections.synchronizedXxx系列方法来创建同步容器,具体如下图

在这里插入图片描述
这几个方法的实现方式都差不多,都是把集合对象作为参数设置进一个新对象里,然后将传递进去的集合作为新建对象的属性封装起来,最后通过访问新建对象的方法(通过synchronized实现同步)去访问传递进去的集合。

这类通过锁实现同步的叫着同步容器,同步容器对于他自身来说是线程安全的,但是我们在进行一些复合操作的时候就可能并不是线程安全的了,比如"int size = vector.size(); vector.remove(size);"这类操作,在多线程情况下如果也有get最后一个元素,就很容易出现异常。

在比如"for (int i = 0; i < vector.size(); i++)"虽然vector是线程安全的,但是可以能在遍历的过程中其他线程对vector进行了操作,比如移除了最后一个,那么这个遍历就会出现异常。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值