Java线程安全的集合

示例

默认情况下,各种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>());

在创建线程安全的集合时,决不能通过原始集合访问它,只能通过线程安全包装器访问它。

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>();