线程安全的集合

默认情况下,各种 Collection 类型不是线程安全的。

但是,使集合线程安全相当容易。

List<String> threadSafeList = Collections.synchronizedList(new ArrayList<String>());
Set<String> threadSafeSet = Collections.synchronizedSet(new HashSet<String>());
Map<String, String> threadSafeMap = Collections.synchronizedMap(new HashMap<String, String>());

当你创建一个线程安全的集合时,你永远不应该通过原始集合访问它,只能通过线程安全的包装器。

Version >= Java SE 5

从 Java 5 开始,java.util.collections 有几个新的线程安全集合,不需要各种 Collections.synchronized 方法。

List<String> threadSafeList = new CopyOnWriteArrayList<String>();
Set<String> threadSafeSet = new ConcurrentHashSet<String>();
Map<String, String> threadSafeMap = new ConcurrentHashMap<String, String>();