ConurrentHashMap和Hashtable的区别

news/2025/2/26 9:48:37

集合类是Java API的核心,但是我觉得要用好它们是一种艺术。我总结了一些个人的经验,譬如使用ArrayList能够提高性能,而不再需要过时的Vector了,等等。JDK 1.5引入了一些好用的并发集合类,它们对于大型的、要求低延迟的电子商务系统来说非常的有用。这篇文章中将会看看ConcurrentHashMap和Hashtable之间的区别。

为什么我们需要ConcurrentHashMap和CopyOnWriteArrayList

同步的集合类(Hashtable和Vector),同步的封装类(使用Collections.synchronizedMap()方法和Collections.synchronizedList()方法返回的对象)可以创建出线程安全的Map和List。但是有些因素使得它们不适合高并发的系统。它们仅有单个锁,对整个集合加锁,以及为了防止ConcurrentModificationException异常经常要在迭代的时候要将集合锁定一段时间,这些特性对可扩展性来说都是障碍。

ConcurrentHashMap和CopyOnWriteArrayList保留了线程安全的同时,也提供了更高的并发性。ConcurrentHashMap和CopyOnWriteArrayList并不是处处都需要用,大部分时候你只需要用到HashMap和ArrayList,它们用于应对一些普通的情况。

ConcurrentHashMap和Hashtable的区别

Hashtable和ConcurrentHashMap有什么分别呢?它们都可以用于多线程的环境,但是当Hashtable的大小增加到一定的时候,性能会急剧下降,因为迭代时需要被锁定很长的时间。因为ConcurrentHashMap引入了分割(segmentation),不论它变得多么大,仅仅需要锁定map的某个部分,而其它的线程不需要等到迭代完成才能访问map。简而言之,在迭代的过程中,ConcurrentHashMap仅仅锁定map的某个部分,而Hashtable则会锁定整个map。

原文链接: Javarevisited 翻译: ImportNew.com - 唐小娟
译文链接: http://www.importnew.com/7166.html


http://www.niftyadmin.cn/n/1573788.html

相关文章

NLPIR语义挖掘平台推动行业大数据应用服务

大数据,IT行业的又一次技术变革,大数据的浪潮汹涌而至,对国家治理、企业决策和个人生活都在产生深远的影响,并将成为云计算、物联网之后信息技术产业领域又一重大创新变革。未来的十年将是一个“大数据”引领的智慧科技的时代、随…

前嗅ForeSpider教程:创建模板

今天,小编为大家带来的教程是:如何在前嗅ForeSpider中创建模板。主要内容有:模板的概念,模板的配置方式,模板的高级选项,具体内容如下: 一,模板的概念 模板列表的层级相当于网页跳转…

AOP的通俗解释

切面编程,就是在你项目原有的功能基础上,通过AOP去添加新的功能,这些功能是建立在原有功能的基础上的,而且原有的功能并不知道你已经添加了新的功能。比如说,你去ATM取钱,取钱是一个功能,取完钱…

Linux C/C++调试技巧

最近崩溃问题较多,把这段时间常用的调试技巧总结一下,分享给大家,希望能对大家有所帮助。 进程的cpu监控 top –p 1234 H跟踪进程堆栈信息 strace –p 1234打印进程当前堆栈 pstack 1234通过gdb查看线程堆栈,并调试程序 gdb attac…

Storm的ack机制 重复消费

Storm的ack机制的弊端可能会导致重复消费 参考文献:https://www.cnblogs.com/intsmaze/p/5918087.html

redis-4.0新功能介绍

2019独角兽企业重金招聘Python工程师标准>>> Lazyfree redis-4.0带来的Lazyfree机制可以避免del,flushdb/flushall,rename等命令引起的redis-server阻塞,提高服务稳定性。 unlink 在redis-4.0之前,redis执行del命令会在…

前后端分离djangorestframework——restful规范

restful现在非常流行,所以很有必要提一下 web服务交互 在浏览器中能看到的每个网站,都是一个web服务。那么我们在提供每个web服务的时候,都需要前后端交互,前后端交互就一定有一些实现方案,我们通常叫web服务交互方案。…

hive表占用的存储空间大小

hadoop fs -du /user/hive/warehouse/table_name|awk { SUM $1 } END { print SUM/(1024*1024*1024)}