concurrent包
locks(锁)
锁的种类
- 公平锁/非公平锁
- 可重入锁
- 可中断锁
- 独享锁/共享锁
- 互斥锁/读写锁
- 乐观锁/悲观锁
- 分段锁
- 偏向锁/轻量级锁/重量级锁
- 自旋锁
锁的优化
- 减少锁持有时间
- 减小锁粒度
- 锁分离
- 锁粗化
- 锁消除
AQS
参考链接
参考1
参考2
AQS、ReetrantLock、Condition实现原理
重要方法:
- isHeldExclusively()
- tryAcquire(int)
- tryRelease(int)
- tryAcquireShared(int)
- tryReleaseShared(int)
Lock
重要方法
- lock()
- lockInterruptibly() throws InterruptedException
- tryLock()
- tryLock(long time, TimeUnit unit) throws InterruptedException
- unlock()
- Condition newCondition()
ReentrantLock
参考链接
参考1
ReentrantReadWriteLock
condition
atomic(原子变量)
- AtomicInteger
- AtomicLong
- AtomicBoolean
- AtomicReference
- AtomicIntegerArray/AtomicLongArray/AtomicReferenceArray
CAS
Unsafe类
ABA问题
executor(线程池)
框架类图
-
ThreadPoolExecutor
关键参数
- workQueue(排队策略)
- threadFactory
- RejectedExecutionHandler(饱和策略)
常用方法
-
Executors
创建线程池
- newFixedThreadPool
- newCachedThreadPool
- newSingleThreadExecutor
- newScheduledThreadPool
collections(并发容器)
List和Set
Map
Queue
-
ArrayBlockingQueue
final ReentrantLock lock; private final Condition notEmpty; private final Condition notFull;
notEmpty和notFull是锁的两个Condition条件
实现原理 -
LinkedBlockingQueue
-
LinkedBlockingDeque
-
ConcurrentLinkedQueue
-
ConcurrentLinkedDeque
tools(同步工具)
- CountDownLatch
- CyclicBarrier
- Semaphore
java内存模型
内存模型概述
- 主内存
- 工作内存
Java内存模型与硬件内存架构的关系
特性
- 原子性
- 可见性
- 有序性
重排序
- 指令重排
- 编译器重排
as-if-serial
happens-before 原则
- 程序顺序原则
- 锁规则
- volatile规则
- 线程启动规则
- 传递性
- 线程终止规则
- 线程中断规则
- 对象终结规则
volatile内存语义
- 可见性
- 禁止重排优化
内存屏障(Memory Barrier)
- LoadLoad Barriers
- StoreStore Barriers
- LoadStore Barriers
- StoreLoad Barriers