Java中Synchronized的偏向锁是如何撤销的?偏向锁线程处于同步块会怎样不处于会怎样?
Java中的偏向锁是一种优化机制,它的目的是减少无竞争情况下的同步操作的开销。偏向锁在对象的标记头中存储了一个Thread ID,表示该对象被某个线程获取了偏向锁。
当一个线程获取了偏向锁,并且在同步块中执行时,不会发生任何特殊的操作。偏向锁会确保该线程可以快速地获得对象的锁,并继续执行同步块中的代码。
如果另一个线程尝试获取同一个对象的锁,那么偏向锁就会被撤销。偏向锁的撤销是通过CAS(比较并交换)操作来实现的。当CAS操作失败时,表示有其他线程尝试获取锁,这时偏向锁会被撤销。
撤销偏向锁后,线程会尝试升级为轻量级锁。如果升级失败,线程会进入重量级锁状态。
总结来说:
- 当一个线程获取了对象的偏向锁,并在同步块中执行时,不会发生任何特殊的操作。
- 当另一个线程尝试获取同一个对象的锁时,偏向锁会被撤销。
- 偏向锁的撤销是通过CAS操作来实现的。
- 撤销偏向锁后,线程会尝试升级为轻量级锁。如果升级失败,线程会进入重量级锁状态。
原文地址: http://www.cveoy.top/t/topic/iIv2 著作权归作者所有。请勿转载和采集!