多线程下:Vector、Hashtable、ArrayList、LinkedList、HashMap 性能特征

JAVA 专栏收录该内容
4 篇文章 0 订阅

最近在研究关于多线程环境下如何提升性能,在程序中执行最多的是“查询”,但同时也要维护数据的“添加”和“删除”

目前在 Hashtable 和 HashMap 中选择。

看了jdk文档,我们知道 Hashtable是同步的,而HashMap是不同步的。

所以一开始的时候,我采用的是 Hashtable,因为程序中80%的时间是在进行“查询”,所以为了提升速度,我改为 HashMap,经过几个小时的上线测试发现一个问题:

因为我在另一个单独的线程中每隔30秒对HashMap进行数据的维护(删除数据),在运行几个小时后发现这个线程发生死锁现象。

后来我又改回采用Hashtable,运行了10个小时,目前一切正常。

结论:看来在多线程的环境下,还得用Hashtable,虽说HashMap的性能能提高一些,但是因为本身是不同步的,所以不能使用在多线程下。当然,如果只是在多线程下进行简单的“查询”,不对数据进行“添加”和“删除”,那用HashMap是可以的,并且肯定能提高性能的。

下面是我在网上搜索到的别人网友写的一些相关内容:

1、如果线程要求安全,使用Vector,Hashtable

2、如果不要求线程安全,应使用ArrayList,LinkedList,HashMap

3、如果要求键值对,则使用HashMap、Hashtable

4、如果数据很大,又要线程安全考虑Vector


访问效率最高的是ArrayList,HashTable次之
如果你会进行大量的插入/删除操作,而不是对容器中的元素进行简单的访问,那就该用LinkedList了

在单线程下:vector和hashtable已经被ArrayList和hashMap代替,所以效率是最低的,

 

  • 2
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值