, 无锁 , 偏向锁 , 轻量级锁 , 重量级锁 ;
三、锁的四种状态 ( 无锁状态 | 偏向锁 | 轻量级锁 | 重量级锁 )
----
Java 虚拟机堆内存中的对象数据中 , 每个对象都有一个对象头..., 持有偏向锁的线程会 释放该偏向锁 , 并添加轻量级锁 ;
锁竞争 : 多个线程尝试获取同一个锁 ;
没有竞争 : 如果每次获取都很顺利 , 没有出现阻塞 , 则没有竞争 ;
有竞争 : 如果线程尝试获取锁..., 只是给单线程执行加了层保险 , 如果没有线程竞争该锁 , 则正常执行 , 如果有线程竞争 , 则将偏向锁升级为轻量级锁 ;
轻量级锁 : 自旋锁 , 等待期间一直做自旋操作 , 效率较高 , 但是空耗..., 无锁 ;
无锁 -> 偏向锁 : 第
1
个线程访问共享资源时 , 无锁状态升级为偏向锁 ;
偏向锁 -> 轻量级锁 : 第
2
个线程再来访问 共享资源 时 , 偏向锁 升级为...轻量级锁 ;
轻量级锁 -> 重量级锁 : 如果 自旋线程数 超过 CPU 核数一半 , 或 单个线程超过
10
次自旋 , 自动将锁升级为重量级锁 ;