Java中ConcurrentHashMap类

news/2024/5/17 17:04:22

什么是ConcurrentHashMap?

ConcurrentHashMap(简称CHM)是在Java 1.5作为Hashtable的替代选择新引入的,是concurrent包的重要成员。

ConcurrentHashMap的锁分段技术

HashTable容器在竞争激烈的并发环境下表现出效率低下的原因,是因为所有访问HashTable的线程都必须竞争同一把锁,那假如容器里有多把锁,每一把锁用于锁容器其中一部分数据,那么当多线程访问容器里不同数据段的数据时,线程间就不会存在锁竞争,从而可以有效的提高并发访问效率,这就是ConcurrentHashMap所使用的锁分段技术,首先将数据分成一段一段的存储,然后给每一段数据配一把锁,当一个线程占用锁访问其中一个段数据的时候,其他段的数据也能被其他线程访问。

什么时候使用ConcurrentHashMap?

CHM适用于读者数量超过写者时,当写者数量大于等于读者时,CHM的性能是低于Hashtable和synchronized Map的。这是因为当锁住了整个Map时,读操作要等待对同一部分执行写操作的线程结束。CHM适用于做cache,在程序启动时初始化,之后可以被多个请求线程访问。正如Javadoc说明的那样,CHM是HashTable一个很好的替代,但要记住,CHM的比HashTable的同步性稍弱。

CHM的一些关键点:

1、CHM允许并发的读和线程安全的更新操作
2、在执行写操作时,CHM只锁住部分的Map
3、并发的更新是通过内部根据并发级别将Map分割成小部分实现的
4、高的并发级别会造成时间和空间的浪费,低的并发级别在写线程多时会引起线程间的竞争
5、CHM的所有操作都是线程安全
6、CHM返回的迭代器是弱一致性,fail-safe并且不会抛出ConcurrentModificationException异常
7、CHM不允许null的键值
8、可以使用CHM代替HashTable,但要记住CHM不会锁住整个Map


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

相关文章

Java中Collections类

Collections是针对集合操作的工具类,有一些功能。&#xff08;没有构造方法&#xff0c;但是其中的方法都是静态的&#xff09;常用方法public static <T> int binarySearch(List<T> list, T key) 使用二分搜索法搜索指定列表&#xff0c;以获得指定对象&#xff…

SSH -- 第十一章、远程联机服务器SSH / XDMCP / VNC / RDP

SSH机制&#xff1a;开启SSH服务&#xff1a;转载于:https://blog.51cto.com/eread/1320542

wordpress整合ckplayer最新版 wp文章短代码调用ck播放器

2019独角兽企业重金招聘Python工程师标准>>> 今天翻了翻网上的教程&#xff0c;试试把ckplay整合到wp里面&#xff0c;虽然没什么多大的帮助&#xff0c;但是小试一手&#xff0c;很简单&#xff0c;几分钟就成功了…… 试试下效果&#xff0c;不错就分享一下吧 …

Java中异常、异常的处理方法及注意事项

Throwable 类是 Java 语言中所有错误或异常的超类包括了Error类与Exception类Throwable的常用方法&#xff1a;String getMessage() 返回此 throwable 的详细消息字符串。 void printStackTrace() 将此 throwable 及其追踪输出至标准错误流。String toString() 返回此 throwab…

Java中return用法的再深入

return语句在顺序结构中的用法 结束该方法&#xff0c;继续执行方法后的语句。return在try-catch-finally语句中的使用 public class TestFinal { public static void main(String[] args) { System.out.println("test1:" testFinal1()); System.out.println(&q…

浅析win7系统如何巧妙的使用离线下载功能

网友们在下载时会经常的碰到这样的问题&#xff0c;就是在经常一段时间的下载后&#xff0c;系统将自动开启休眠状态&#xff0c;可是下载却终止了&#xff01;这样就租个了下载的进程&#xff0c;使得载下的文件失败。面对这样的问题相信很多的网友们很是烦恼吧&#xff01;那…

Java中File类的常用方法

File类表示文件或者目录的路径的抽象表现形式. IO流就是对文件进行操作的 构造方法public File(String pathname) 表示pathname的抽象路径表现的形式 (开发中使用这种方式)public File(String parent,String child) 根据 parent 路径名字符串和 child 路径名字符串创建一个新 …

Java中I/O流

I/O&#xff1a;jvm和外部数据源的数据交换。流一共有三种分类&#xff1a; 方向分&#xff1a;输入流和输出流&#xff1b; 输入流: 读取文件 (e:\\a.txt):从硬盘上文件读取出来后输出这个文件的内容输出流: 写文件:将e:\\a.txt 内容读出来--->写到f盘下单位分&#xff…