reentrantlock的底层实现原理
时间: 2023-05-21 20:00:56 浏览: 80
ReentrantLock是通过内部的同步器实现的,它使用了一种叫做AQS(AbstractQueuedSynchronizer)的同步器来实现锁的功能。AQS是一个抽象类,它提供了一些方法来管理同步状态,包括获取锁、释放锁、阻塞线程等。ReentrantLock通过继承AQS并实现其中的方法来实现锁的功能。具体实现原理可以参考AQS的源码。
相关问题
ReentrantLock底层原理
ReentrantLock是一个可重入锁,实现了Lock接口,并且支持重新进入的特性。当一个线程通过调用lock方法获取了锁之后,如果再次调用lock方法,该线程不会被阻塞,而是增加了重试次数。
在ReentrantLock内部,它维护了一个Sync内部类,该类实现了Lock接口的方法,并且通过调用AQS(AbstractQueuedSynchronizer)的Acquire方法来实现加锁的操作。具体而言,根据ReentrantLock初始化时选择的公平锁或非公平锁,Sync的Lock方法会执行相关的内部类Lock方法,最终会调用AQS的Acquire方法。
因此,ReentrantLock底层的原理是通过Sync内部类的Lock方法调用AQS的Acquire方法来实现加锁操作的。这一过程实现了可重入的特性,使得同一个线程可以多次获取锁而不会被阻塞。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* *2* [7-ReentrantLock底层原理分析](https://blog.csdn.net/weixin_45596022/article/details/113817683)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"]
- *3* [ReentrankLock的底层原理](https://blog.csdn.net/qq_45974547/article/details/123486390)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"]
[ .reference_list ]
reentrantlock的底层原理?
ReentrantLock是Java中用于同步线程的一个类,它的底层原理是基于AQS(AbstractQueuedSynchronizer)实现的。AQS是一个提供了同步器框架的抽象类,ReentrantLock通过继承AQS来实现同步功能。
在ReentrantLock中,主要有两个核心属性:state和exclusiveOwnerThread。state表示锁的状态,用于记录锁的持有数,而exclusiveOwnerThread表示当前持有锁的线程。
在ReentrantLock中,主要有两个核心方法:lock()和unlock()。当一个线程调用lock()方法时,如果锁没有被其他线程持有,该线程会获取到锁并将state加1,并将exclusiveOwnerThread设置为当前线程。如果锁已经被当前线程持有,那么它会增加state的计数器,表示重入次数加1。
在unlock()方法中,会将state减1,并在state为0时释放锁。如果state大于0,表示锁还被其他线程持有,当前线程仍然可以继续持有锁。
另外,ReentrantLock还提供了公平性选择,可以在构造ReentrantLock对象时指定是否为公平锁。公平锁会倾向于将锁授予等待时间最长的线程。
总之,ReentrantLock通过AQS的底层实现来提供可重入的互斥锁,保证线程安全的访问共享资源。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)