🤖AQS中的可重入锁

-
-
2024-01-27

synchronized实现可重入锁的方式是一个counter计数器,一个线程重复加锁(moniter enter)的话那么counter + 1,释放锁(moniter exit) 就让counter - 1,直到变为0。

AQS中的可重入锁实现方式同synchronized类似,用的是资源变量state来维护加锁的次数。并且这个state是volatile修饰的。

下面是非公平锁的加锁方法。

可以看到如果当前线程是持有资源的那个线程,那么将加锁次数对state变量进行累加,并通过CAS操作写回state。

比较有趣的是nextc < 0会抛出一个超出最大加锁次数限制(int最大值)的异常,可以构造一个比int还大的数让state溢出,让它出现这个错误。

不知道synchronized的可重复加锁次数上限是多少🏀🐔🥲。


梅狸猫
meilicat
公告

随便看看就好~