简介
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);}
}
}