JUC
JUC是什么
由JDK提供的线程开发工具包 java.util.concurrent的简称,位于JRE的lib中的rt.jar(runtime.jar)下,它提供了Atomic原子类、locks(我们主要关注的是AQS)、多线程并发编程相关的类(线程池、三大并发工具等)
Atomic原子类
原子类就是具有原子 操作特征的类,通过volatie + Unsafe类中对CAS(Compare AND Swap)的实现保证并发安全,Unsafe 类的所有方法都是 native 修饰的,也就是说所有方法都是直接调用操作系统底层资源进行执行相应任务,通常一个操作一但开始,就不会被其他线程影响。
各种原子类都是依赖于Usafe类中的方法去实现,通过native本地方法,直接调用操作系统底层资源执行相应任务;
locks (通常关注AQS)
JVM提供了synchronized给开发者使用,但是在并发编程的场景下,它提供的功能往往无法满足业务需求;
AbstractQueuedSynchronizer 是一个抽象的队列同步器,定义了一套多线程访问共享资源的同步模板,提供了如ReentrantLock、CountDownLatch、Semaphore等同步工具
主要构成:
1: state 同步状态
2:Node 节点组成的CLH队列
3:Condition t条件变量
线程池 ThreadPool
提供线程池的相关接口
ThreadPoolExecutor 是线程池的核心实现类