Collections.synchronized***系列源码分析

简介

Collections类包含一些集合的静态工具方法,包含集合的包装类,包装类能返回指定集合支持的安全集合。

synchronizedMap

public static <K,V> Map<K,V> synchronizedMap(Map<K,V> m) {
    returnnew SynchronizedMap<>(m);
}
// 实现Map 为了实现里面的方法 这点让它能拥有HashMap的功能
private static class SynchronizedMap<K,V> implements Map<K,V>, Serializable {
    private static final long serialVersionUID = 1978198479659022715L;

    private final Map<K,V> m;     // 桶
    final Object      mutex;      // 并发访问的锁对象

    SynchronizedMap(Map<K,V> m) {
        this.m = Objects.requireNonNull(m);
        mutex = this; // 默认当前对象作为锁对象
    }

    SynchronizedMap(Map<K,V> m, Object mutex) {
        this.m = m;
        this.mutex = mutex; // 也可自定也锁对象
    }
	// 下面是map里方法 加了锁确保并发安全
    public int size() {
        synchronized (mutex) {return m.size();}
    }
    public boolean isEmpty() {
        synchronized (mutex) {return m.isEmpty();}
    }
    public boolean containsKey(Object key) {
        synchronized (mutex) {return m.containsKey(key);}
    }
    public boolean containsValue(Object value) {
        synchronized (mutex) {return m.containsValue(value);}
    }
    public V get(Object key) {
        synchronized (mutex) {return m.get(key);}
    }
}
原文地址:https://www.cnblogs.com/paper-man/p/13284612.html