1. JUC主要包含以下几类:
2. 各模块介绍
-
原子更新
Java
从JDK1.5
开始提供了java.util.concurrent.atomic
包,方便程序员在多线程环 境下,无锁的进行原子操作。在Atomic
包里一共有 12 个类,四种原子更新方式,分别是原子更新基本类型,原子更新 数组,原子更新引用和原子更新字段。 -
锁和条件变量
java.util.concurrent.locks
包下包含了同步器的框架AbstractQueuedSynchronizer
,基于AQS
构建的Lock
以及与Lock
配合可以实现等待/通知模式的Condition
。JUC
下的大多数工具类用到了Lock
和Condition
来实现并发。 -
线程池 涉及到的类比如:
Executor
、Executors
、ThreadPoolExector
、AbstractExecutorService
、Future
、Callable
、ScheduledThreadPoolExecutor
等等。 -
阻塞队列 涉及到的类比如:
ArrayBlockingQueue
、LinkedBlockingQueue
、PriorityBlockingQueue
、LinkedBlockingDeque
等等。 -
并发容器 涉及到的类比如:
ConcurrentHashMap
、CopyOnWriteArrayList
、ConcurrentLinkedQueue
、CopyOnWriteArraySet
等等。 -
同步器 剩下的是一些在并发编程中时常会用到的工具类,主要用来协助线程同步。比如:
CountDownLatch
、CyclicBarrier
、Exchanger
、Semaphore
、FutureTask
等等。在学习JUC
之前我们需要了解CAS
,AQS
和Unsafe
,对于大部分初学并发编程的同学这几个概念容易在脑中混淆,所以先分别说说这几个概念。