在本讲中,我们将解释为什么普通集合(
ArrayList、
HashMap)在多线程环境中是危险的,以及包
java.util.concurrent 提供了哪些线程安全的替代方案:
ConcurrentHashMap、
CopyOnWriteArrayList、
ConcurrentLinkedQueue、基于跳表(skip-list)的结构和
BlockingQueue。我们将讨论诸如
merge、
putIfAbsent、
computeIfAbsent 之类的原子操作,与
Collections.synchronizedMap 做比较,并给出实践示例与常见错误(弱一致性迭代器、非原子性的操作序列等)。