JDK 8u20后ConcurrentHashMap的结构图是怎样的
时间: 2023-08-28 07:20:28 浏览: 98
在 JDK 8u20 及之后的版本中,ConcurrentHashMap 的内部结构发生了变化,不再使用 HashEntry 类作为存储单元。相反,每个桶直接存储了节点链表的头节点,并使用 synchronized 或 CAS(Compare and Swap)等机制来实现并发安全性。
这种结构被称为 "数组+链表" 结构,在 JDK 8u20 及之后的版本中是如下所示的:
```
ConcurrentHashMap
├── Table
│ ├── Node (桶0)
│ │ ├── Node1
│ │ └── Node2
│ ├── Node (桶1)
│ │ ├── Node3
│ │ └── Node4
│ └── ...
├── Table
│ ├── Node (桶0)
│ └── ...
├── Table
│ └── ...
└── ...
```
- `ConcurrentHashMap` 是整个 ConcurrentHashMap 的顶层结构。
- `Table` 是一个数组,每个元素称为一个桶,存储了链表的头节点。
- `Node` 是每个键值对的封装单元,包含键、值以及指向下一个节点的引用。
每个桶(Node)存储了一个链表的头节点,并通过 `next` 引用连接到同一个桶中的下一个节点,形成链表结构。当多个线程同时访问同一个桶时,会使用 synchronized 或 CAS 等机制来保证并发的安全性。
这种 "数组+链表" 结构在 JDK 8u20 及之后的版本中提供了更好的性能和并发能力,相较于旧版本的 HashEntry 结构,减少了内存占用并提高了并发访问的效率。
阅读全文