Java并发包:ConcurrentMap
转载自 Java并发包:ConcurrentMap
文章译自:http://tutorials.jenkov.com/java-util-concurrent/index.html
抽空翻译了一下这个教程的文章,后面会陆续放出,如有不妥,请批评指正。
转自请注明出处。
之前漏了一篇文章,这篇应该是在双端队列之后的,这里补上。
ConcurrentMap
java.util.concurrent.ConcurrentMap接口代表一个Map,它可以处理并发访问。ConcurrentMap除了继承自java.util.Map的方法,还有一些自己的原子方法。
ConcurrentMap的具体实现
由于ConcurrentMap是一个接口类,使用时需要使用它的实现类。Java.util.concurrent包中有下面关于ConcurrentMap接口的实现类。
- ConcurrentHashMap
ConcurrentHashMap
ConcurrentHashMap除了有更好的并行性,它与java.util.HashTable类时非常相似的。当你从ConcurrentHashMap读取数据的时候ConcurrentHashMap是不会加锁的。另外,ConcurrenthashMap在写的时候不会全部加锁。它仅仅锁住Map中正在被写入的部分。
ConcurrentHashMap的另一个不同之处是,如果在迭代的时候ConcurrentHashMap被修改了,ConcurrentHashMap是不会抛出ConcurrentModificationException异常的。迭代器不能被超过一个以上的线程使用。
查看官方文档获取ConcurrentMap和ConcurrentHashMap更详细的信息。
ConcurrentMap实例
ConcurrentMap concurrentMap = new ConcurrentHashMap();concurrentMap.put("key", "value");Object value = concurrentMap.get("key");
ConcurrentNavigableMap
java.util.concurrent.ConcurrentNavgableMap接口类是一种支持并行访问的java.util.NavigableMap,并且它的子map也支持并行访问,子map是通过headMap(),subMap()和tailMap()等方法返回的。
这里不重新解释NavigableMap中已有的相同方法,我们仅看看在ConcurrentNavigableMap中增加的一些方法。
haedMap()
headMap(T toKey) 返回一个包含许多键的map,其中所有键值是严格少于给定的toKey。
如果你改变了原始的map,这些改变也会反映到head map上。
下面的例子说明了headMap()方法的使用。
ConcurrentNavigableMap map = new ConcurrentSkipListMap();map.put("1", "one");
map.put("2", "two");
map.put("3", "three");ConcurrentNavigableMap headMap = map.headMap("2");
headMap将会指向一个仅仅包含key为“1”的ConcurrentNavigableMap,因为只有这个key是严格小于“2”的。ConcurrentSkipListMap是ConcurrentNavigableMap的实现类。
查看JavaDoc了解这个方法以及它的重载版本更详细的执行情况。
tailMap()
tailMap(T fromKey)返回一个包含许多键的map,其中所有键值是大于或者等于给定的fromKey的。
如果你改变了原始的map,这些改变也会反映到head map上。
下面的例子说明了tailMap()方法的使用。
ConcurrentNavigableMap map = new ConcurrentSkipListMap();map.put("1", "one");
map.put("2", "two");
map.put("3", "three");ConcurrentNavigableMap tailMap = map.tailMap("2");
tailMap将包含“2”、“3”两个键,因为这两个键是大于或者等于给定的键值“2”。
查看JavaDoc了解这个方法以及它的重载版本更详细的执行情况。
subMap()
subMap()方法返回一个包含许多键的map,这些键值是介于传给该方法的(including)和(excluding)两个参数之间的,下面是一个例子:
ConcurrentNavigableMap map = new ConcurrentSkipListMap();map.put("1", "one");
map.put("2", "two");
map.put("3", "three");ConcurrentNavigableMap subMap = map.subMap("2", "3");
方法返回的subMap仅包含一个key等于“2”的键值对,因为只有这个键是大于或等“2”,并且小于“3”的。
更多方法
ConcurrentNavigableMap接口还包含跟多的一些方法也许会用到的,例如:
- descendingKeySet()
- descendingMap()
- navigableKeySet()
更多信息请查看官方JavaDoc。
Java并发包:ConcurrentMap相关推荐
- java并发包线程池原理分析锁的深度化
java并发包&线程池原理分析&锁的深度化 并发包 同步容器类 Vector与ArrayList区别 1.ArrayList是最常用的List实现类,内部是通过数组实现的,它允许对元素 ...
- 腾讯面试题Java 并发包之线程池综述
Java 并发包之线程池综述 ■ 线程池的创建 在Java中,您可以通过调整-Xss参数来调节每个线程栈的大小(64bit系统默认1024KB),当减小该值时意味着可以创建更多的线程数,但问题是JVM ...
- 死磕java并发cas_死磕 java并发包之AtomicInteger源码分析
问题 (1)什么是原子操作? (2)原子操作和数据库的ACID有啥关系? (3)AtomicInteger是怎么实现原子操作的? (4)AtomicInteger是有什么缺点? 简介 AtomicIn ...
- java并发包系列---LockSupport
长久以来对线程阻塞与唤醒经常我们会使用object的wait和notify,除了这种方式,java并发包还提供了另外一种方式对线程进行挂起和恢复,它就是并发包子包locks提供的LockSupport ...
- 深入java并发包源码(三)AQS独占方法源码分析
深入java并发包源码(一)简介 深入java并发包源码(二)AQS的介绍与使用 深入java并发包源码(三)AQS独占方法源码分析 AQS 的实现原理 学完用 AQS 自定义一个锁以后,我们可以来看 ...
- java 高并发第三阶段实战_Java 高并发第三阶段实战---Java并发包深入解析与使用详解...
第三阶段的课程主要围绕着Java并发包的使用,展开详细的介绍,主要内容有1.原子包源码剖析,2.并发包工具类详细介绍,3.线程服务以及Future和callable等详细介绍,4.高并发容器和阻塞容器 ...
- 第 5-6 课:Java 并发包中的高级同步工具 + 面试题
Java 中的并发包指的是 java.util.concurrent(简称 JUC)包和其子包下的类和接口,它为 Java 的并发提供了各种功能支持,比如: 提供了线程池的创建类 ThreadPool ...
- Java并发包基石-AQS详解
目录 1 基本实现原理 1.1 如何使用 1.2 设计思想 2 自定义同步器 2.1 同步器代码实现 2.2 同步器代码测试 3 源码分析 3.1 Node结点 3.2 独占式 3.3 共享式 4 总 ...
- Java并发包——使用新的方式创建线程
Java并发包--使用新的方式创建线程 摘要:本文主要学习了如何使用Java并发包中的类创建线程. 部分内容来自以下博客: https://www.cnblogs.com/dolphin0520/p/ ...
最新文章
- MFC如何打开文件路径
- 使用文本用户界面(NMTUI)进行网络配置
- 【spring-session】介绍
- 《数据库SQL实战》查找最晚入职员工的所有信息
- 角谱传播法matlab模拟,角谱法分析高斯光
- PIC18F452之1602自定义字符
- python 32bit数据结构_python实现bitmap数据结构详解
- AngularJS日期格式化
- python repair修复功能_详解Python修复遥感影像条带的两种方式
- Python+tkinter+sqlite3模拟通信录管理系统
- Java中HttpClient设置超时时间
- 金属粉末增材制造行业调研报告 - 市场现状分析与发展前景预测
- LNMP(linux+nginx+mysql+php)服务器环境配置
- WebForm与MVC模式优缺点
- electron入门笔记(三)- 引入bootstrap
- linux早期内核的khttpd服务器--策略污染机制
- android3d动画的实现,Android 3D旋转动画库
- 计算机组成与设计第五版课后答案ch04,数据结构第4章例题与答案
- idea调用自己的方法(introduce local variable)
- ps 快速切图
热门文章
- AcWing 1381. 阶乘
- Facade(外观)--对象结构型模式
- 安装 java decompiler_Eclipse离线安装Java Decompiler插件(反编译)
- HTMLCSS 超简单的前端设计入门-1!
- 经典排序算法(4)——折半插入排序算法详解
- Spring集成Mybatis配置映射文件方法详解
- Codeforces Round #700 (Div. 2) C. Searching Local Minimum 交互二分
- 最小生成树--Boruvka算法
- Acwing 276. I-区域
- 疾病预测和天气分析练习赛