随笔分类 -  java并发包源码解析

摘要:应用场景 读多写少。读写锁,读读不互斥,写写、写读互斥。读多写少的话可以避免读读的互斥。 ReentrantReadWriteLock 构造函数 ReadLock和WriteLock是ReentrantReadWriteLock的内部类,构造函数将ReentrantReadWriteLock的syn 阅读全文
posted @ 2020-04-21 15:55 鹿慕叶 阅读(205) 评论(0) 推荐(0)
摘要:CyclicBarrier的实现比较简单,是基于ReentrantLock来实现的 应用场景 一组线程在某个节点同步,再继续执行 核心逻辑 dowait nextGeneration 图解 画了张图理一下CyclicBarrier await的基本流程 阅读全文
posted @ 2020-04-20 13:45 鹿慕叶 阅读(138) 评论(0) 推荐(0)
摘要:应用场景 主线程等待子线程完成后继续执行 sync acquireSharedInterruptibly 实际调用的父类AQS acquireSharedInterruptibly 这里仔细看一下setHeadAndPropagate方法做了什么事情 AQS releaseShared ①Sync 阅读全文
posted @ 2020-04-18 15:54 鹿慕叶 阅读(274) 评论(0) 推荐(0)
摘要:应用场景 举个栗子,30个人上一个公共厕所,但是只有3个坑位 semaphore.acquire sync acquireSharedInterruptibly ①AQS setHeadAndPropagate sync .releaseShared ① AQS tryReleaseShared,具 阅读全文
posted @ 2020-04-18 11:00 鹿慕叶 阅读(216) 评论(0) 推荐(0)
摘要:上源码 实现调用的是sync的newCondition方法 最终返回的是AQS(AbstractQueuedSynchronizer)的ConditionObject对象 下面来分析一下Condition的实现类ConditionObject对的await和signal实现 Condition.aw 阅读全文
posted @ 2020-04-17 16:58 鹿慕叶 阅读(496) 评论(0) 推荐(0)
摘要:ReentrantLock的tryLock方法是对Lock接口的tryLock实现 应用场景 非阻塞的场景,允许某些任务不执行(比如防止重复提交业务),或超时不执行(比如防止资源等待队列溢出)等 不带参数的 tryLock 实现比较简单,内部调用sync nonfairTryAcquire方法,该方 阅读全文
posted @ 2020-04-14 17:07 鹿慕叶 阅读(984) 评论(0) 推荐(0)
摘要:假设场景 有10件商品,同时来30个人并发购买,不加锁的情况下会超出现超卖,加上lock锁后就防止了超卖 带着问题看源码 1. ReentrantLock是怎么加锁和解锁的 2. ReentrantLock是怎么实现可重入的 ReentrantLock是怎么加锁的? ReentrantLock lo 阅读全文
posted @ 2020-04-14 15:01 鹿慕叶 阅读(516) 评论(0) 推荐(0)