### ConcurrentHashMap
> CAS + synchronized 控制并發操作
#### sizeCtl
> 0 默認值
> -1 代表正在初始化
> >0 表示閾(yu)值
> < -1 多個線程正在進行擴容
#### 與hashMap區別
> 初始化:使用CAS的保證只有一個線程能進行初始化
> 增加元素:如果桶是空的,通過CAS放入新值
> 如果發現正在擴容,則需要幫助擴容
> 幫助擴容的時候,需要判斷當前桶是不是正在擴容,如果不是的話,
> 如果桶不是空的,鎖住桶的頭節點,開始插入;再分是鏈表還是紅黑樹。
1. 當 Cmap 嘗試插入的時候,發現該節點是 forward 類型,則會幫助其擴容。
2. 每次加入一個線程都會將 sizeCtl 的低 16 位加一。同時會校驗高 16 位的標示符。
3. 擴容最大的幫助線程是 65535,這是低 16 位的最大值限制的。
4. 每個線程默認分配 16 個桶,如果桶的數量是 16,那么第二個線程無法幫助其擴容。
- 虛擬機
- JVM內存結構
- JVM調優手段
- java對象生命周期
- 垃圾回收判斷對象死亡
- 垃圾回收算法
- 垃圾收集器
- JAVA基礎知識
- java事件機制
- java反射機制
- jvm創建對象
- java異常
- finally語句一定會執行嗎?
- 集合類介紹
- ArrayList
- LinkedList
- HashMap
- ConcurrentHashMap
- 多線程
- 為什么要使用線程池
- 線程死鎖
- 死鎖檢測和解除
- jstack
- jconsole
- 死鎖預防
- 常見線程池
- 線程池參數
- 工作隊列介紹
- 拒絕策略
- ThreadLocal
- CAS
- ReentrantLock
- AQS
- CountDownLatch
- Spring
- spring中bean的作用域
- REDIS
- redis數據結構
- redis hash實現
- redis rehash與hashmap擴容的區別
- Redis使用場景
- Redis為何這么快
- redis連接數不足導致錯誤
- 分布式
- 分布式事務
- ACID
- CAP
- BASE
- 事務隔離性
- 一致性哈希算法
- 負載均衡算法
- Hystrix 信號量和線程池隔離的差異
- Spring Cloud
- eureka
- MYSQL
- mysql優化經驗
- undo redo binlog
- web
- http協議
- http和https區別
- Cookie和session
- TCP三次握手、4次揮手
- TCP的time_wait和close_wait
- 算法問題
- 編輯距離算法
- MQ
- RabbitMq
- Kafka
- 安裝教程
- Win ELK安裝