ConcurrentHashMap 原理
分段锁
在java并发包(java.util.concurrent简称J.U.C)里面,ConcurrentHashMap是线程安全的HashMap,通过引入分布式的概念将一个大的Map拆分成多个小的 HashTable。在存值和取值的时候通过key.hashCode()来计算key及其对应的值应该放到哪个HashTable中,默认情况下ConcurrentHashMap会创16个分段数组集合。
这样在进行操作的时候如果有3个线程A、B、C,这时候A、B两个线程根据key.hashCode()可能被分配到同一个HashTable中,这样A在进行操作的时候B就会阻塞,但C这个线程可能被分配到了另外一个HashTable中,这样C就可以直接执行而不会阻塞。这样一来效率就得到了极大的提升。默认情况下可以提高16倍。