为什么ConcurrentHashMap是线程安全的
时间: 2023-11-21 09:56:52 浏览: 91
ConcurrentHashMap是线程安全的,因为它使用了一种叫做分段锁(Segment)的机制。具体来说,ConcurrentHashMap将整个Map分成了若干个小的Segment,每个Segment维护了一个Hash表。在默认情况下,ConcurrentHashMap有16个Segment,因此最多可以同时支持16个线程的并发修改操作。当一个线程占用了某个Segment进行修改操作时,只有该Segment上的锁会被加锁,其他的Segment不会被锁住,因此不会影响到其他线程对其他Segment的访问。这样就可以大大提高并发访问效率,同时保证线程安全。
ConcurrentHashMap的线程安全还得益于其底层实现。在JDK1.7中,ConcurrentHashMap的底层实现是基于分段锁的机制,而在JDK1.8中,ConcurrentHashMap的底层实现则是基于CAS(Compare And Swap)算法和Synchronized实现的。这两种实现方式都可以保证线程安全,但是在不同的场景下,它们的性能表现可能会有所不同。
```java
// Java中使用ConcurrentHashMap的例子
ConcurrentHashMap<String, Integer> map = new ConcurrentHashMap<>();
map.put("apple", 1);
map.put("banana", 2);
map.put("orange", 3);
int value = map.get("banana");
System.out.println(value); // 输出:2
```
阅读全文