代码GitHub地址 github.com/imyiren/con…
Vector和HashTable
HashMap和ArrayList
虽然这两个类不是线程安全的,但是可以用Collections
的synchronizedList(list)
和synchronizedMap(map)
包装使之变成线程安全的
但是实质上,里面还是用synchronized
实现, 以map
为例:看源码:
public static <K,V> Map<K,V> synchronizedMap(Map<K,V> m) { return new SynchronizedMap<>(m); } 复制代码
private static class SynchronizedMap<K,V> implements Map<K,V>, Serializable { ...... SynchronizedMap(Map<K,V> m) { this.m = Objects.requireNonNull(m); mutex = this; } ...... 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);} } ...... 复制代码
synchronized
不是加在方法上,但是其实每个方法都是在调用对应map的方法并在外层包裹synchronized
ConcurrenthashMap
和CopyOnWriteArrayList
HashMap
和ArrayList
以及HashTable
和Vector
这些容器