锁升级的概念是,原来都要去操作系统,要找内核去申请这把锁,到后期对sychronized
进行了一些改进,sychronized的hospot的实现过程。
- 新建对象的时候是无锁状态。
- 第一个去访问某把锁的线程,来了之后现在这个对象头上面的markword记录这个线程。(其实只有一个线程访问的时候实际上是没有给这个object加锁的,内部只是记录这个线程的ID)现在就是偏向锁。
- 偏向锁如果有线程竞争的话,就自动升级为自旋锁,自旋锁的概念是每个线程在线程栈中都有一个lockThread对象,尝试去获取锁,获取成功的话,吧自己的线程id放在锁上,表示获取锁资源,执行逻辑,若获取失败,有其他线程占用则会一直重复尝试获取锁。
-
自旋锁转圈十次或者计算机的核数,升级为 重量级锁 ,重量级锁就是去操作系统那里去申请资源。