1、偏向锁(一般情况会关闭)
CAS比较
compare and swap(value, expect, update)
compareAndSet
2、轻量级锁
自旋获取锁,自旋会占用CPU资源,如果一定次数之后还未获取轻量级锁,锁膨胀成重量级锁。
自旋次数:
1、设置自旋次数 preBlockSpin
2、自适应自旋
3、重量级锁
升级到重量级锁后,没有获得锁的线程会被阻塞。(block状态)
ObjectMonitor
monitorenter--------->monitor------->monitorexit(随机唤醒一个阻塞的线程)
4、wait、notify、notifyall
wait:会实现线程的阻塞,会释放当前的同步锁
notify/notifyall:将等待队列中的线程移到同步阻塞队列中
5、wait和sleep的区别
wait会释放锁和CPU资源
sleep不会释放锁资源,会释放CPU资源