加轻量级锁时,如果cas操作失败,轻量级锁变重量级锁,这个过程叫锁膨胀


自旋优化
当t1线程获得锁时,另t2线程也尝试获得,这时,t2不会直接进入阻塞队列,而是进行自旋,如果自旋成功,避免阻塞。
自旋:尝试获取锁,未获取到不进入阻塞,再次尝试。
-
自旋会占用 CPU 时间,单核 CPU 自旋就是浪费,多核 CPU 自旋才能发挥优势。
-
在 Java 6 之后自旋锁是自适应的,比如对象刚刚的一次自旋操作成功过,那么认为这次自旋成功的可能性会高,就多自旋几次;
反之,就少自旋甚至不自旋
-
Java 7 之后不能控制是否开启自旋功能(默认自旋)
-
