- 博客(2)
- 资源 (1)
- 收藏
- 关注
原创 AQS源码简单理解三:解锁
上一篇博客写了AQS加锁过程,文章后面只是浅谈了下阻塞线程被唤醒后该怎么执行。这篇博客主要描述解锁过程,以及再深入看下阻塞线程被唤醒后怎么走的。解锁过程从 reentrantLock.unlock() 方法走到 release(int arg) 。解锁的核心代码如下:// AbstractQueuedSynchronizer.classpublic final boolean release(int arg) { // 是否解锁成功? if (tryRelease(arg)) {
2021-02-04 14:56:27 254 1
原创 AQS源码简单理解二:加锁
(手头的活忙完了,来补一篇博客)上篇提到多线程并发但却没有竞争的时候,AQS只是多执行了一行代码而已,没有线程队列,更没有重量级锁。所以它比优化前的synchronized() 效率高些。这篇主要介绍如果多线程且有竞争,AQS 是怎么处理的。AQS通过自旋、CAS、park 三种方式结合使用 ,尽量将多线程同步放在 JVM 层完成,实在搞不定了,再创建重量级锁实现多线程同步。加锁核心代码这里与公平锁为例(公平与非公平的区别在这里)。顺着 reentrantLock.lock() 一直往下走到 Ab
2021-02-03 20:50:17 211 2
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人