文章目录
一、JUC整体架构
JUC全名为java.util.concurrent
,与JUC有关的包共有三个,分别为java.util.concurrent
、java.util.concurrent.atomic
和java.util.concurrent.locks
,其中java.util.concurrent
又可以分为三大类,分别为工具类,集合与线程池,
JUC整体架构(紫色为接口,绿色为类,蓝色为方法)
二、Lock框架
1、JUC Lock:LockSupport详解
LockSupport用来创建锁和其他同步类的基本线程阻塞原语。简而言之,当调用LockSupport.park时,表示当前线程将会等待,直至获得许可,当调用LockSupport.unpark时,必须把等待获得许可的线程作为参数进行传递,好让此线程继续运行。
2、JUC Lock:锁核心类AQS详解
AQS(AbstractQueuedSynchronizer)是一个用来构建锁和同步器的框架,使用AQS能简单且高效地构造出应用广泛的大量的同步器,比如我们提到的ReentrantLock,Semaphore,其他的诸如ReentrantReadWriteLock,SynchronousQueue,FutureTask等等皆是基于AQS的。当然,我们自己也能利用AQS非常轻松容易地构造出符合我们自己需求的同步器.
三、Atomic:原子类
JUC中多数类是通过volatile和CAS来实现的,CAS本质上提供的是一种无锁方案,而Synchronized和Lock是互斥锁方案; java原子类本质上使用的是CAS,而CAS底层是通过Unsafe类实现的。所以需要对CAS, Unsafe和原子类详解