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

浙公网安备 33010602011771号