多线程并发知识概况
2018-07-30 17:00:57 0 举报
AI智能生成
多线程知识概况
作者其他创作
大纲/内容
Java内存模型
内存屏障Memory Barrier
保证特定操作的执行顺序
保证特定数据的内存可见性
happens-before规则
程序顺序规则
监视器锁规则
volatile域规则
传递性规则
指令重排序
为了提高性能
存在数据依赖性的操作间不会重排序
as-if-serial语义
线程间通信
共享变量
JMM定义了线程和主内存之间的抽象关系
线程间通信方式
线程状态转换
等待/通知
thread.join()
原子操作
基本类型
AtomicBoolean
AtomicInteger
AtomicLong
数组
AtomicIntegerArray
AtomicLongArray
AtomicReferenceArray
引用类型
AtomicReference
AtomicReferenceArrayFieldUpdater
核心
CAS+自旋
volatile
volatile实现机制
语义/作用
可见性
禁止指令重排
happen-before原则
并发集合
ConcurrentHashMap
ConcurrentLinkedQueue
其他
ThreadLocal
Fork/Join
并发基础
AQS
设计模式
设计原理
两种共享方式
Exclusive独占模式
Share共享模式
三个基本组件
同步状态的原子性管理
线程的阻塞和唤醒
队列的管理
同步队列
等待队列
ConditionObject源码
字段
firstWaiter
lastWaiter
await()
Thread.interrupted() 可中断设置
addConditionWaiter() 将线程放入队列尾部lastWaiter
fullyRelease(node) 释放资源
LockSupport.park(this) 挂起线程,等待唤醒
signal()
isHeldExclusively() 判断当前线程是否占有锁,不占有则抛异常IllegalMonitorStateException
doSignal(first) 对队列首结点(一般为当前结点)执行唤醒操作,具体见下一步骤
transferForSignal(node) 当前结点状态设为0,enq(node)线程移至同步队列,并将其前驱结点状态设为SIGNAL
signalAll()
源码分析
重要字段
int state
Node head
Node tail
公共方法
compareAndSetState
compareAndSetHead
comapreAndSetTail
comapreAndSetWaitStatus
compareAndSetNext
子类需要实现的自定义方法
独占模式锁
tryAcquire(int)
tryRelease(int)
isHeldExclusively()
共享模式锁
tryAcquireShared(int)
tryReleaseShared(int)
资源获取和释放机制
CAS
Unsafe核心类
反射机制new实例
核心方法
native objectFieldOffset
native compareAndAddInt
缺陷
ABA问题
自旋时间过长的话,会造成CPU浪费,长时间做无用功
只能针对一个共享变量
synchronized
synchronized原理
1. 锁的是什么?
对象
2. 如何实现的锁对象?
对象头-Mark Word记录锁状态信息
如何分配monitor
1.6的锁优化
锁粗化
锁清除
轻量级锁
偏向锁
适应性自旋
自旋timeout时间根据上个线程自旋时间动态变化
CPU使用率较低时一直自旋
自旋数量超过CPU数量/2时,直接进入阻塞
CPU节能模式不自旋
锁升级
1. 偏向锁(适用于无竞争情况,当出现多个线程时升级成轻量级锁)
2. 轻量级锁(适用于多线程交替持有锁情况,当出现竞争时膨胀成重量级锁)
3. 重量级锁(多线程同时竞争锁)
使用锁的优化策略
减少锁时间
减小锁粒度
锁粗化
读写锁
锁
ReentrantLock
结构
内部类Sync
继承自AQS
锁的同步操作是委托给Sync具体执行的
实现公平性和非公平性两种锁
Lock接口的实现
void lock()
void unlock()
boolean tryLock()
Condition newCondition()
特性
可重入
线程的再次进入
锁的真正释放
可中断
可限时
支持公平锁
支持非公平锁
ReentrantReadWriteLock
Condition
并发工具类
CyclicBarrier
CountDownLatch
Semphore
线程池
Executor
ThreadPoolExecutor
Callable、Future
ScheduledExecutorService
0 条评论
下一页