2. 锁住同步资源失败后,<br>线程是否阻塞?<br>
阻塞
synchronized
ReentrantLock
Object的notify、notifyAll
Condition
LockSupport
synchronized
ReentrantLock
Object的notify、notifyAll
Condition
LockSupport
不阻塞
自旋锁
适应性自旋锁
自旋锁
实现
操作系统内核
TicketLock
CLHLock
MCSLock
优点
不需要线程切换
短时间占用cpu提高程序运行效率
缺点
无法保证锁的公平性
长时间占用锁,浪费cpu
3. 锁的公平性
公平锁
轮流获取锁
ReentrantLock(可以选择公平、非公平)
5. 多个线程能否共享一把锁
共享锁
ReentrantReadWriteLock的读锁
CountDownLatch
Semaphore
独占锁、排它锁
synchronized
ReentrantLock
ReentrantReadWriteLock的写锁
6. 多个线程竞争同步资源<br>(Synchronized实现细节)
无锁
不锁住资源,多线程访问只有一个能成功修改资源,其它线程会重试,<br>基于CAS实现,多次同一访问,锁会升级为偏向锁
偏向锁
适用同一线程多次访问的情况,在对象头中存储ThreadID,<br>每次加锁进行检查,如果ThreadID相同,则直接获取资源,不用重复加锁,<br>多线程同时访问会升级为轻量级锁
轻量级锁(自旋)
偏向锁阶段多个线程同时访问,会撤销偏向锁,<br>升级为轻量级锁,未获取资源的线程会自旋获取锁
重量级锁
自旋到达一定次数还未获取锁,锁膨胀为重量级锁,线程阻塞等待唤醒