您的位置:首页 > 其它

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

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

目前在 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代替,所以效率是最低的,
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐