java并发编程实战中5.2.2节写到由于ConcurrentHashMap不能被加锁来执行独占式访问,因此我们无法使用客户端加锁来创建新的原子操作。
一开始无法理解这句话的描述,因为如果有一个ConcurrentHashMap对象,在所有使用这个对象的地方都对这个对象客户端加锁,那么也能保证这个对象复合操作的原子性;后来才明白他想说的其实是即使使用客户端加锁,也存在无法保证ConcurrentHashMap复合操作的原子性的情况,也就是无法保证执行独占式访问,具体看下面例子
ConcurrentHashMap
public class ConcurrentHashMapTest {
private static ConcurrentHashMap<Integer,Integer> map = new ConcurrentHashMap<>(16);
public static void main(String[] args) {
Thread t1 = new Thread(new Runnable() {
@Override
public void run() {
synchronized (map) {
for (int i = 0; i < 10; i++) {
System.out.println("Thread1" + i)
i