在Java中,Synchronized的偏向锁是通过使用Thread对象的ThreadLocal字段来实现可重入的。

当一个线程第一次获取锁时,会将锁对象的标记设置为当前线程的ThreadLocal字段(偏向线程)的值,并将锁对象的偏向计数器设置为1。此后,该线程再次获取锁时,只需要检查锁对象的标记是否为当前线程的ThreadLocal字段的值,如果是,就无需竞争锁,直接增加偏向计数器的值即可。

当一个线程释放锁时,会将锁对象的偏向计数器减1。只有当偏向计数器减为0时,其他线程才有机会获取偏向锁。

这样做的好处是,当只有一个线程访问同步代码块时,可以避免竞争锁的开销,提高了程序的执行效率。同时,偏向锁是可重入的,也就是说一个线程可以多次获取同一个锁,而不会出现死锁的情况。

Java中Synchronized的偏向锁是如何做到可重入的?

原文地址: https://www.cveoy.top/t/topic/iIuY 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录