1.什么是AQS? 并发容器里面的同步器
-
AQS使用Node实现FIFO队列,可以构建其他的锁或者同步装置的基础框架,AQS其实就是一个可以给我们实现锁的框架。
-
内部实现的关键是:先进先出的队列(CLH队列(三个名字组成),是一个双向队列)、int类型的state表示状态。
-
使用方式是继承,子类实现方法(acquire,release)来管理他的状态。
-
定义了内部类ConditionObject
-
拥有两种线程模式,可以同时实现排他锁和共享锁模式
-
独占模式
-
共享模式
-
-
在LOCK包中的相关锁(常用的有ReentrantLock、 ReadWriteLock)都是基于AQS来构建
-
一般我们叫AQS为同步器
2.AQS架构
3.AQS同步组件
CountDownLatch
Semaphore
CyclicBarrier
ReentrantLock
Condition
FutureTask
4.并发容器
之前所学的同步容器不是线程安全的,不能做到线程安全
ArrayList===>CopyOnWriteArrayList
CopyOnWriteArrayList如果数据比较多的情况,极耗内存,因为拷贝导致 young full GC,不能用作实时读取数据,实时性能差,适合读多写少,如果不确定数据有多少就要慎用。
HashMap ===> ConcurrentHashMap
TreepMap===>CurrentSkipListMap 速度不快,但是key有序,支持超高并发,比ConcurrentHashMap支持的并发高
HashSet===> CopyOnWriteArraySet
TreeSet===> ConCurrentSkipListSet