唯's Blog

笔者是一个热爱编程的 Java 程序员。

0%

ConcurrentHashMap

ConcurrentHashMap 的一些方法是线程安全的,一些不是。其中线程安全的包括:get、put、remove、containsKey。线程不安全的包括:size、clear、isEmpty。

其中 get 方法虽然是线程安全的,但是方法中并没有加锁。底层通过 volatile 保证读取的时的可见性(node.val)。Node 若是红黑树,则会加上读写锁进行查询。

上述方法所说的线程安全,可以保证单个方法调用的原子性 。如果存在多个方法调用的复合逻辑,可能就需要加锁保证线程安全了。