目录
一. 前言
JUC是JAVA中java.util.concurrent包的简称。它位于JDK的rt.jar中,是JDK的核心工具包之一。从字面上来理解就是java并发工具包。
主要包含: (上图无法表述一些继承关系,同时少了部分类;但是主体上可以看出其分类关系)
Lock框架和Tools类(把图中这两个放到一起理解)
Collections: 并发集合
Atomic: 原子类
Executors: 线程池
二. 分类
2.1. Lock框架和Tools类
Lock常见类:接口有Condition、Lock、ReadWriteLock,抽象类有AbstractOwnableSynchonizer、AbstractQueuedLongSynchronizer、AbstractQueuedLongSynchronizer、AbstractQueuedSynchronizer,实现类有LockSupport、ReentrantLock、ReentrantReadWriteLock、StampedLock。详细拆解请参见《JUC之Lock及核心AQS》。
Tools工具类:CountDownLatch、CyclicBarrier、Phaser、Semaphore、Exchanger。详细拆解请参见《CountDownLatch、CyclicBarrier、Semaphore、Exchanger详解》
2.2. Collections并发集合
常见并发集合:List有CopyOnWriteArrayList,Map有ConcurrentHashMap、ConcurrentSkipListMap,Set有CopyOnWriteArraySet、ConcurrentSkipListSet,Queue有ArrayBlockingQueue、LinkedBlockingQueue、LinkedBlockingDeque、ConcurrentLinkedQueue、ConcurrentLinkedDeque、DelayQueue、PriorityBlockingQueue、SynchronousQueue、LinkedTransferQueue。List详解请参见《List家族》,Map详解请参见《Map家族》,Set详解请参见《Set家族》,Queue家族详解请参见《Queue家族》。
2.3. Atomic原子类
原子类的基本特性就是在多线程环境下,当有多个线程同时执行这些类的实例包含的方法时,具有排他性,即当某个线程进入方法,执行其中的指令时,不会被其他线程打断,而别的线程就像自旋锁一样,一直等到该方法执行完成,才由JVM从等待队列中选择一个线程进入,这只是一种逻辑上的理解。实际上是借助硬件的相关指令来实现的,不会阻塞线程(或者说只是在硬件级别上阻塞)。详解请参见《JUC之Atomic原子类》。
基础类型:AtomicBoolean,AtomicInteger,AtomicLong
数组:AtomicIntegerArray,AtomicLongArray,BooleanArray
引用:AtomicReference,AtomicMarkedReference,AtomicStampedReference
FieldUpdater:AtomicLongFieldUpdater,AtomicIntegerFieldUpdater,AtomicReferenceFieldUpdater
2.4. Executors线程池
详解请参见:《线程池详解》。