ConcurrentHashMap如何在Java中为多个线程同时放置、删除和获取同一段的映射项(键、值)?

ConcurrentHashMap如何在Java中为多个线程同时放置、删除和获取同一段的映射项(键、值)?,java,java-ee-7,java-ee-8,Java,Java Ee 7,Java Ee 8,假设有三个线程想要访问Java(Java7)的ConcurrentHashMap的同一个对象。 这三个线程分别具有put、remove和get操作。 请您帮助我理解,ConcurrentHashMap如何在Java(Java 7)中为多个线程在同一时间放置、删除和获取相同段的映射项(键、值)? 如果Java 8中有任何相同的更新,请指定 编辑: 根据Java 7,ConcurrentHashMap中的段是什么意思? 更新操作期间允许的并发级别可以通过可选的ConcurrentyLevel构造函数

假设有三个线程想要访问Java(Java7)的ConcurrentHashMap的同一个对象。 这三个线程分别具有put、remove和get操作。 请您帮助我理解,ConcurrentHashMap如何在Java(Java 7)中为多个线程在同一时间放置、删除和获取相同段的映射项(键、值)? 如果Java 8中有任何相同的更新,请指定

编辑:

根据Java 7,ConcurrentHashMap中的段是什么意思?

更新操作期间允许的并发级别可以通过可选的ConcurrentyLevel构造函数参数(默认值16)[ConcurrentHashMap(int-initialCapacity,float-loadFactor,int-ConcurrentyLevel)]设置,该参数用作内部大小调整的提示,用于内部分区ConcurrentHashMap,这种分区通常称为段。每个段管理自己的哈希表。默认情况下,ConcurrentHashMap维护16个段的列表


谢谢和问候

如果您真的想知道这些方法是如何工作的,请查看源代码。或者查看JDK文件夹中的
source.zip
在抽象级别上,其效果就像3个线程在不同的时间以任意顺序执行其操作,而不是全部3个线程同时执行,类似于SQL的可序列化隔离级别;当对单个密钥执行任何操作时,ConcurrentHashMap将获取该密钥的锁。(锁是内部的;它不会在实际的密钥对象本身上同步。)我建议将Java7和Java8的源文件与diff进行比较,看看是否有任何更改。