博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HashMap、Hashtable与ConcurrentHashMap
阅读量:4144 次
发布时间:2019-05-25

本文共 709 字,大约阅读时间需要 2 分钟。

区别 HashMap
Hashtable
ConcurrentHashMap
安全性
非线程安全
线程安全
线程安全
性能
异步处理,性能高
同步处理,性能校低
适合高并发
null操作 key和value允许存放null 都不允许null 都不允许null

ConcurrentHashMap=HashMap的高性能+Hashtable的线程安全

多线程环境下,使用Hashmap进行put操作可能产生不同的结果,是非线程安全的,所以在多线程情况下不能使用HashMap。

HashTable,但是HashTable使用synchronized(他的get和put方法的实现代码如下)来保证线程安全,synchronized是针对整张Hash表的,即每次锁住整张表让线程独占。在线程竞争激烈的情况下HashTable的效率非常低下。因为当一个线程访问HashTable的同步方法时,访问其他同步方法的线程就可能会进入阻塞或者轮询状态。如线程1使用put进行添加元素,线程2不但不能使用put方法添加元素,并且也不能使用get方法来获取元素,所以竞争越激烈效率越低,不适合高并发。

ConcurrentHashMap允许多个修改操作并发进行,其关键在于使用了分段技术。它使用了多个锁来控制对hash表的不同部分进行的修改。put、remove操作会加锁,get读取操作不加锁。适合高并发场景。

HashMap JDK1.2 单线程情况下一般使用;

Hashtable JDK1.0 历史集合类,实现了map接口,已经逐渐被弃用;

ConcurrentHashMap JDK1.5 实际开发中多使用,多线程高并发场景;

转载地址:http://zebti.baihongyu.com/

你可能感兴趣的文章
SVN for Eclipse plugins 中文转英文 (新方法)
查看>>
Angular.JS + Require.JS + angular-async-loader 来实现异步加载 angular 模块
查看>>
怎么设置可以把dropdown设成可以输入数据
查看>>
Javascript Versions
查看>>
用javascript动态调整iframe高度
查看>>
subclipx v1.02 - 简单实用的轻量级多维剪贴板工具
查看>>
让Java程序自带JRE
查看>>
最近写了一个简单的面向对象的脚本语言 Q 语言
查看>>
可完全定制的Javascript日历 (Callback 实现)
查看>>
一切都是对象
查看>>
Q 语言 -- 字符串
查看>>
Q 语言 -- 数组
查看>>
Q 语言 -- HashMap
查看>>
document.getElementByClass
查看>>
JAVA 进程异常高的 CPU 占用率
查看>>
Delphi 使用 RTTI 动态通过名称调用函数和设置控件属性值
查看>>
用 Java 把 html 转成 pdf
查看>>
得到 Linux, Unix 终端大小
查看>>
Humpic JDBC Logger 监控SQL语句。
查看>>
subclipx v1.07 - 简单实用的轻量级多维剪贴板工具
查看>>