J.U.C并发包简介

J.U.C并发包简介

J.U.C并发包, 即java.util.concurrent包, 是JDK的核心工具包, 是JDK1.5之后, 由 Doug Lea实现 并引入.
整个J.U.C包按照功能可划分如下:

  • J.U.C_locks: 锁框架
  • J.U.C_atomic: 原子类框架
  • J.U.C_sync: 同步器框架
  • J.U.C_collections: 集合框架
  • J.U.C_executors: 执行器框架

J.U.C_locks 锁框架

早期的JDK版本中, 仅仅提供了synchronizd、wait、notify等等比较底层的多线程同步工具, 开发人员如果需要开发复杂的多线程应用, 通常需要基于JDK提供的这些基础工具进行封装, 开发自己的工具类. JDK1.5+后, Doug Lea根据一系列常见的多线程设计模式, 设计了JUC并发包, 其中java.util.concurrent.locks包下提供了一系列基础的锁工具, 用以对synchronizd、wait、notify等进行补充、增强.

  • 接口
    • Lock
    • Condition
    • ReadWriteLock
  • 实现类
    • ReentrantLock
    • ReentrantReadWriteLock
    • StampedLock
  • 辅助类
    • LockSupport
    • AbstractOwnableSynchronizer
      • AbstractQueuedLongSynchronizer
      • AbstractQueuedSynchronizer
本部分相关文章:

J.U.C_atomic 原子类框架

早期的JDK版本中, 如果要并发的对Integer、Long、Double之类的Java原始类型或引用类型进行操作, 一般都需要通过锁来控制并发, 以防数据不一致.
从JDK1.5开始, 引入了java.util.concurrent.atomic工具包, 该包提供了许多Java原始/引用类型的映射类, 如AtomicInteger、AtomicLong、AtomicBoolean, 这些类可以通过一种“无锁算法”, 线程安全的操作Integer、Long、Boolean等原始类型.
所谓“无锁算法”, 其实底层就是通过Unsafe类实现的一种比较并交换的算法, 大致的结构如下: boolean compareAndSet(expectedValue, updateValue); 当希望修改的值与expectedValue相同时, 则尝试将值更新为updateValue, 更新成功返回true, 否则返回false.

  • 更新基本类型
    • AtomicBoolean
    • AtomicInteger
    • AtomicLong
  • 更新数组类型
    • AtomicIntegerArray
    • AtomicLongArray
    • AtomicReferenceArray
  • 更新引用类型
    • AtomicReference
    • AtomicMarkableReference
    • AtomicStampedReference
  • 更新字段
    • AtomicIntegerFieldUpdater
    • AtomicLongFieldUpdater
    • AtomicReferenceFieldUpdater
  • 其他
    • Striped64
      • DoubleAccumulator
      • DoubleAdder
      • LongAccumulator
      • LongAdder
本部分相关文章:

J.U.C_sync 同步器框架

这里的J.U.C_sync同步器框架, 是指java.util.concurrent包下一些辅助同步器类, 每个类都有自己适合的使用场景:

  • CountDownLatch: 倒数计数器, 构造时设定计数值, 当计数值归零后, 所有阻塞线程恢复执行. 内部实现了AQS框架.
  • CyclicBarrier: 循环栅栏, 构造时设定等待线程数, 当所有线程都到达栅栏后, 栅栏放行. 其内部通过ReentrantLock和Condition实现同步.
  • Semaphore: 信号量, 类似于令牌, 用于控制共享资源的访问数量. 其内部实现了AQS框架.
  • Exchanger: 交换器, 类似于双向栅栏, 用于线程之间的配对和数据交换. 其内部根据并发情况有“单槽交换”和“多槽交换”之分.
  • Phaser: 多阶段栅栏, 相当于CyclicBarrier的升级版, 可用于分阶段任务的并发控制执行. 其内部比较复杂, 支持树形结构, 以减少并发带来的竞争.
本部分相关文章:

J.U.C_collections 集合框架

这里的J.U.C_collections集合框架, 是指java.util.concurrent包下的一些同步集合类, 按类型划分可以分为: 符号表队列Set集合列表 四大类, 每个类都有自己适合的使用场景.

  • 符号表
    • ConcurrentMap: 接口
      • ConcurrentNavigableMap
        • ConcurrentSkipListMap
      • ConcurrentHashMap
  • 队列
    • BlockingQueue
      • TransferQueue
        • LinkedTransferQueue
      • BlockingDeque
        • LinkedBlockingDeque
      • LinkedBlockingQueue
      • ArrayBlockingQueue
      • PriorityBlockingQueue
      • DelayQueue
    • ConcurrentLinkedQueue
    • ConcurrentLinkedDueue
  • Set集合
    • CopyOnWriteArraySet
    • ConcurrentSkipListSet
  • 列表
    • CopyOnWriteArrayList
本部分相关文章:

J.U.C_executors 执行器框架

executors框架是整个J.U.C包中类/接口关系最复杂的框架, executors其实可以划分为3大块, 每一块的核心都是基于Executor这个接口.

  • 线程池
  • Future模式
  • Fork/Join框架
本部分相关文章:
  • Java线程池基本架构

本文借鉴自segmentfault并发专栏

你可能感兴趣的:(J.U.C并发包简介)