龙空技术网

怎么理解可重入锁

程序员之道 105

前言:

如今咱们对“重入锁实现原理”可能比较珍视,咱们都想要知道一些“重入锁实现原理”的相关内容。那么小编同时在网上搜集了一些关于“重入锁实现原理””的相关资讯,希望看官们能喜欢,你们一起来了解一下吧!

什么是可重入锁

当一个线程获取对象锁之后,这个线程可以再次获取本对象上的锁,我么就将其称为可重入锁。

常见的可重入锁有synchronized 和 ReentrantLock。

可重入锁的原理

每一个锁关联一个线程持有者和计数器,当计数器为 0 时表示该锁没有被任何线程持有,那么任何线程都可能获得该锁而调用相应的方法;当某一线程请求成功后,JVM会记下锁的持有线程,并且将计数器置为 1;此时其它线程请求该锁,则必须等待;而该持有锁的线程如果再次请求这个锁,就可以再次拿到这个锁,同时计数器会递增1;当线程退出同步代码块时,计数器会递减1,如果计数器为 0,则释放该锁。

‬可重入锁的作用

重入锁的做用之一在于防止死锁,也就是防止因为资源等待而获取不到锁,如果一个线程在自己等待自己拥有的资源释放,那么永远也等不到,陷入死锁,如果自己的资源不用等待,也就可以解决死锁。

#redis# #死锁#

标签: #重入锁实现原理