Java并发容器相关概念

这里先介绍一下Java并发容器相关的概念。

同步容器
将容器的访问进行串行化,从而实现线程安全,这样做的缺点是多线程并发访问时,降低了并发性和吞吐量。早期的同步容器,例如:Vactor、HashTable。这类容器自身的方法都加了同步来限制多线程的读写,从而达到多线程安全的目的。

并发容器
并发容器是为了多线程访问进行了优化。Java5.0提供了几种并发的容器来改进同步容器,例如:ConcurrentHashMap、CopyOnWriteArrayList等。Java5.0还提供了两个新的容器:Queue和BlockingQueue。

ConcurrentHashMap使用了一个更加细化的锁机制:分段锁(分离锁)。读和写可以并发访问,任意数量的线程可以并发读Map,有限数量的线程可以并发修改Map。
不会抛出ConcurrentModificationException,ConcurrentHashMap的迭代器具有弱一致性,而非fail-fast。
弱一致性迭代器允许容器并发修改。

CopyOnWriteArrayList是一个同步List的替代品。提供了更好的并发性,避免了迭代期间的加锁和复制。
不会抛出ConcurrentModificationException,因为对容器的修改,不会影响已经创建的迭代器的元素。
其只有在写入时复制,复制一组新的元素。

BlockingQueue阻塞队列提供了可阻塞的put和take方法。
队列满了,put阻塞,队列空了,take阻塞。
阻塞队列支持生产者-消费者的关系。

双端队列Deque,可以从队列两端进行操作。

闭锁
是一个同步器,延迟进程的进度,直到线程达到终止状态。
应用:确保一个计算不会执行,直到它需要的资源被初始化;确保一个服务不会开始,直到它依赖的服务已经启动。
Java类:CountDownLatch、FutureTask、Semaphore、CycleBarrier。