程序员

Java并发-框架概述

2018-11-20  本文已影响10人  宛丘之上兮
Doug Lea

前面几篇文章介绍了java.util包下的集合List和Map,从这篇文章开始介绍java.util.concurrent包的内容,包的作者是大名鼎鼎的Doug Lea。

Concurrent集合是Java™ 5 的巨大附加产品,但是在关于注解和泛型的争执中很多 Java 开发人员忽视了它们。此外(或者更老实地说),许多开发人员避免使用这个数据包,因为他们认为它一定很复杂,就像它所要解决的问题一样。

事实上,java.util.concurrent包含许多类,能够有效解决普通的并发问题,无需复杂工序。引用-- 您不知道的5 件事java.util.concurrent,第1部分-IBM

此包包含atomic,locks,concurrent三个包:

它们都用到了CAS(compare-and-swap)操作。CAS 是一种低级别的、细粒度的技术,它允许多个线程更新一个内存位置,同时能够检测其他线程的冲突并进行恢复。它是许多高性能并发算法的基础。在 JDK 5.0 之前,Java 语言中用于协调线程之间的访问的惟一原语是同步,同步是更重量级和粗粒度的。公开 CAS 可以开发高度可伸缩的并发 Java 类。这些更改主要由 JDK 库类使用,而不是由开发人员使用。 引用--java.util.concurrent包详细分析

CAS操作都封装在java 不公开的类库中,sun.misc.Unsafe,此类包含了对原子操作的封装,具体用native代码实现,native的C代码直接利用到了硬件上的原子操作。

java.util.concurrent提供了一些并发情况下使用的线程安全的集合: java.util.concurrent集合框架

花这么大精力手动画这张图到底值不值?真是累死。图中带颜色的分为5大类共14个集合类:

  1. ArrayBlockingQueue 、LinkedBlockingQueue 、ConcurrentLinkedQueue 、LinkedTransferQueue、PriorityBlockingQueue、SynchronousQueue、DelayQueue;
  2. ConcurrentLinkedDeque、LinkedBlockingDeque;
  3. CopyOnWriteArraySet、ConCurrentSkipListSet;
  4. CopyOnWriteArrayList;
  5. ConcurrentHashMap、ConcurrentSkipListMap

之前的文章讲过,java.util包下的集合都是fail-fast的,这个包下的集合都是fail-safe的。

后续文章会对atomic、locks、concurrent三个内容进行详细的分析,本篇结束。

上一篇 下一篇

猜你喜欢

热点阅读