最近在研究关于多线程环境下如何提升性能,在程序中执行最多的是“查询”,但同时也要维护数据的“添加”和“删除”
目前在 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代替,所以效率是最低的,
(转)多线程下:Vector、Hashtable、ArrayList、LinkedList、HashMap 性能特征,布布扣,bubuko.com
(转)多线程下:Vector、Hashtable、ArrayList、LinkedList、HashMap 性能特征
原文地址:http://www.cnblogs.com/ian-fix/p/3855401.html