源码
185的阿平
集中起来的力量可以击穿顽石
展开
-
ReentrantReadWriteLock读锁源码分析
读锁的获取,两个核心方法 tryAcquiretry tryAcquireShared方法 Thread current = Thread.currentThread();获取当前线程 int c = getState();获取锁状态 32位 if (exclusiveCount(c) != 0 && getExclusiveOwnerThread() != current) return -1;//写锁次数不是0说明写锁被获取并且不是当前线程获取,那就获取...原创 2020-11-16 23:00:13 · 84 阅读 · 0 评论 -
ReentrantReadWriteLock写锁源码分析
有几个特性,读锁是共享的,能被多个线程占有。写锁是独占的。只能有一个线程占有。获取了写锁能在获取读锁成为锁降级。获取了读锁不能再获取写锁。也不支持锁升级。 写锁的获取 tryAcquire方法 writerShouldBlock方法,非公平锁直接返回false,公平锁如下。 写锁的释放 tryRelease方法 ...原创 2020-11-16 22:55:33 · 76 阅读 · 0 评论 -
ReentrantLock非公平锁源码解读
ReentrantLock中的公平锁以及非公平锁实现是继承AQS.所以在调用构造方法传入的值决定了是否为公平锁。其中的lock方法底层调用AQS的acquire方法。如下 tryAcquire方法的实现有公平和非公平实现,可以看到实现类有ReentrantLock 非公平锁加锁流程NonfairSync方法 如果如果没抢到锁 如果没抢到锁,就执行后续流程acquireQueued(addWaiter(Node.EXCLUSIVE), arg),就执行后续流程acquireQue...原创 2020-11-09 14:36:01 · 124 阅读 · 1 评论