(1) ⾃旋锁
在线程进⾏阻塞的时候,先让线程⾃旋等待⼀段时间,可能这段时间其它线程已经解锁,这时就⽆需让线程再进⾏阻塞操作了。
⾃旋默认次数是10次。
(2) ⾃适应⾃旋锁
⾃旋锁的升级,⾃旋的次数不再固定,由前⼀次⾃旋次数和锁的拥有者的状态决定。
(3) 锁消除
在动态编译同步代码块的时候,JIT编译器借助逃逸分析技术来判断锁对象是否只被⼀个线程访问,⽽没有其他线程,这时就可以取消锁了。
4、锁粗化
当JIT编译器发现⼀系列的操作都对同⼀个对象反复加锁解锁,甚⾄加锁操作出现在循环中,此时会将加锁同步的范围粗化到整个操作系列的外部。
锁粒度:不要锁住⼀些⽆关的代码。
锁粗化:可以⼀次性执⾏完的不要多次加锁执⾏。