线程安全与同步
-
无同步:A. 可重入代码;B. ThreadLocal
-
互斥同步(阻塞同步):synchronized/Lock
Lock的优势:可中断;可有多个newCondition;自定义是否公平锁 -
非阻塞同步:
CAS – 机器指令实现 – UnsafeLoop: ... CAS ...
CAS问题:
A. ABA问题 – 解决:加锁
B. 循环等待问题 – 解决:机器指令pause
C. 一个变量原子性,多个变量需要 – 解决:锁 or 拼接多个变量
锁优化
-
自旋锁/自适应自旋
A. 等待10次
B. 根据上次获取锁时间自适应等待:自旋 or 切换线程状态从用户态到和心态 -
锁消除:消除多余的加锁操作
-
锁粗化:将多个频繁的可合并锁粗化为一个
-
轻量级锁、偏向锁
主要是针对锁竞争不激烈的情景,提高锁利用率
借助对象head部分的信息(MarkWord)
|- 01 - 偏向锁
|- 00 - 轻量级锁
|- 10 - 重量级锁
|- 11 - GC出现竞争时状态转换:偏向锁(记录threadID)---->轻量级锁(CAS)---->重量级锁