jdk1.8 ConcurrentHashMap的put操作
时间: 2023-10-27 21:53:38 浏览: 89
JDK1.8 ConcurrentHashMap的一点理解
5星 · 资源好评率100%
ConcurrentHashMap是Java中线程安全的哈希表实现,它支持高并发的读写操作。在JDK1.8中,ConcurrentHashMap的put操作大致分为以下几个步骤:
1. 计算key的哈希值。这个哈希值将被用于定位key在哈希表中的位置。
2. 使用哈希值和一些位运算,计算出key在哈希表中的索引位置,也就是bucket的位置。
3. 如果该bucket上没有锁定,那么尝试使用CAS操作将桶锁定。如果CAS操作成功,那么当前线程会持有这个bucket上的锁。
4. 如果该bucket上已经被锁定,那么当前线程会尝试锁定其他的bucket,直到找到一个没有被锁定的bucket。
5. 如果找到了一个没有被锁定的bucket,那么当前线程会重复第3步。
6. 如果当前线程成功锁定了一个bucket,那么它会检查该bucket上是否已经存在相同的key,如果存在,则将value替换为新的value。
7. 如果该bucket上没有相同的key,那么将新的key-value对插入到该bucket中。
8. 如果该bucket已经满了,那么需要进行扩容操作。
需要注意的是,ConcurrentHashMap的put操作并不能保证原子性,因为在多线程的环境中,有可能多个线程同时尝试插入相同的key,这就会导致数据的不一致。因此,ConcurrentHashMap使用了锁来保证线程安全,但这也会影响到性能。
阅读全文