ConcurrentHashMap的源码分析-sizeCtl扩容退出机制
生活随笔
收集整理的這篇文章主要介紹了
ConcurrentHashMap的源码分析-sizeCtl扩容退出机制
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
在擴容操作transfer的第2414行,代碼如下
if (U.compareAndSwapInt(this, SIZECTL, sc = sizeCtl, sc - 1)) { if ((sc - 2) != resizeStamp(n) << RESIZE_STAMP_SHIFT)每存在一個線程執行完擴容操作,就通過cas執行sc-1。
接著判斷(sc-2) !=resizeStamp(n) << RESIZE_STAMP_SHIFT ;?如果相等,表示當前為整個擴容操作的?最后一個線程,那么意味著整個擴容操作就結束了;如果不想等,說明還得繼續
這么做的目的,一方面是防止不同擴容之間出現相同的sizeCtl,另外一方面,還可以避免sizeCtl的ABA問題導致的擴容重疊的情況
?
總結
以上是生活随笔為你收集整理的ConcurrentHashMap的源码分析-sizeCtl扩容退出机制的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ConcurrentHashMap的源码
- 下一篇: ConcurrentHashMap的源码