30
2020
01

ConcurrentHashMap 原理

 1. 最大特点是引入了 CAS(借助 Unsafe 来实现【native code】)


        1. CAS有3个操作数,内存值V,旧的预期值A,要修改的新值B。当且仅当预期值A和内存值V相同时,将内存值V修改为B,否则什么都不做。


        1. Unsafe 借助 CPU 指令 cmpxchg 来实现


        1. 使用实例:


            1. 对 sizeCtl 的控制都是用 CAS 来实现的


>1. sizeCtl :默认为0,用来控制 table 的初始化和扩容操作。


>    - -1 代表table正在初始化


>    - N 表示有 -N-1 个线程正在进行扩容操作


>    - 如果table未初始化,表示table需要初始化的大小。


>    - 如果table初始化完成,表示table的容量,默认是table大小的0.75倍,居然用这个公式算0.75(n - (n >>> 2))。


        1. CAS 会出现的问题:ABA


            - 对变量增加一个版本号,每次修改,版本号加 1,比较的时候比较版本号。

« 上一篇 下一篇 »

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。