
Java多线程
xhjwyy
这个作者很懒,什么都没留下…
展开
-
ReentrantReadWriteLock说明
ReentrantReadWriteLock线程安全的问题使用ReentrantLock就可以了,但是ReentrantLock是独占锁,只能有一个线程获取到锁,实际环境中可能会有读多写少的情况,此时ReentrantLock就满足不了了,而ReentrantReadWriteLock采用的读写分离的策略,允许多个线程获取读锁。读写锁内部维护了一个ReadLock和WriteLock,他们依赖于Sync实现具体功能。而Sync实现于AQS,也都实现了公平和非公平两种策略。AQS内部只维护了一个sta原创 2020-07-15 15:52:29 · 388 阅读 · 0 评论 -
ReentrantLock说明
ReentrantLockReentrantLock是基于AQS实现的可重入的独占锁,只有一个线程可以获取锁,如果获取锁的其他线程处于阻塞则会被放入AQS的等待队列。其内部有公平锁和非公平锁两种实现方式,都是对AQS的实现。如下类图,Sync实现与AQS,NonfairSync与FairSync继承与Sync分别代表非公平锁和公平锁的实现。默认创建(即构造函数未指定参数)的锁时非公平锁。这里AQS的state代表线程获取该锁的重入次数,默认情况下state状态为0,表示没有线程获取到锁。当一个线程第原创 2020-07-13 15:51:52 · 250 阅读 · 0 评论 -
AQS简单源码说明
AbstractQueuedSynchronizer所谓AQS,指的是AbstractQueuedSynchronizer,它提供了一种实现阻塞锁和一系列依赖FIFO等待队列的同步器的框架,ReentrantLock、Semaphore、CountDownLatch、CyclicBarrier等并发类均是基于AQS来实现的,具体用法是通过继承AQS实现其模板方法,然后将子类作为同步组件的内部类。变量waitStatus则表示当前Node结点的等待状态,共有5种取值CANCELLED、SIGNAL、CON原创 2020-07-07 15:46:26 · 178 阅读 · 0 评论