JUC源码解析
南墩-小仙女
这个作者很懒,什么都没留下…
展开
-
AbstractQueuedSynchronizer(AQS)源码解析一
这章不会对Condition部分进行讲解 抽象的队列同步器 AQS 对锁资源获取的过程进行了抽象,具体的获取过程留给子类去实现 子类不用去关心在获取不到锁资源的情况下,当前线程如何被挂起,如何被唤醒 这些都是由AQS来实现,获取资源和释放资源是典型的模板方式模式应用 AQS的重要属性 双向链表来控制锁资源的获取 头节点是获取到锁的线程,thread会被置为null 节点信息 节点的两种模式...原创 2019-08-11 22:48:56 · 360 阅读 · 0 评论 -
CountDownLatch源码解析
CountDownLatch 使用AQS中的共享锁 一个或多个线程等待一个或多完成之后再执行 await方法 同步状态的值大于0线程阻塞原创 2019-08-15 20:56:46 · 186 阅读 · 0 评论 -
Semaphore源码解析
前言 在AQS源码解析一中,我们说到了AQS对锁资源获取的过程进行了抽象,帮我们实现了线程如何被挂起、如何被唤醒等操作,分析了独占模式和共享模式底层是如何实现的,今天我们来看看Semaphore(信号量)底层是怎么控制资源获取和释放的,这样可以进一步加深我们对AQS的理解。 Semaphore 内部使用共享锁实现 有公平和非公平的两种实现 以许可证为共享资源控制使用共享资源的线程数 线程抢夺到指...原创 2019-08-12 22:48:20 · 88 阅读 · 0 评论 -
AbstractQueuedSynchronizer(AQS)源码解析二
这章来说一说Condition Object中的notify、notifyAll没法唤醒一组特定的阻塞线程,只能唤醒全部中的一个或者全部(获取到锁的线程只有一个) Condition它可以实现唤醒特定的一组线程中的一个线程,对于同一一个锁,它可以创建多个Condition,协调控制多组线程 Condition的具体实现ConditionObject AQS中的内部类 ConditionObje...原创 2019-08-31 10:59:57 · 144 阅读 · 0 评论 -
ReentrantLock源码解析
ReentrantLock源码解析原创 2019-09-03 20:39:33 · 489 阅读 · 0 评论 -
ArrayBlockingQueue源码解析
基于jdk1.8 数组阻塞队列 线程安全的 底层:对象数组+ReentrantLock + notFullCondition + notFullCondition notFullCondition+notFullCondition用的是同一个ReentrantLock 出队列与入队列是阻塞进行的,某个时间点,只有一个线程能获取到锁,然后生产或者消费数据 添加的数据不能为null 队列长度是有限制...原创 2019-09-04 21:30:43 · 150 阅读 · 0 评论 -
LinkedBlockingQueue源码解析
基于jdk1.8 线程安全 底层实现原理:单项链表 + 2个ReentrantLock + 2个Condition 生产和消费数据用的不是同一独占锁,生产和消费是可以同时进行 生产者从队尾添加数据,消费者从队头的下一个节点开始获取数据 生产数据达到了容量则生产线程等待,消费者消费完了数据则消费者线程等待 头节点的数据项为null,不允许添加的数据项为null LinkedBlockingQue...原创 2019-09-07 16:07:28 · 167 阅读 · 0 评论 -
LinkedBlockingDeque源码解析
基于jdk1.8 双端阻塞队列 线程安全的 实现原理:双向链表 + 1个ReentrantLock + 2个Condition 生产者和消费者同一把独占锁,同一时刻只有一个线程能获取到锁生产者在生产数据或者一个消费者在消费数据 生产的数据不能为null 生产者生产数据、消费者消费数据可以从队头或者队尾 LinkedBlockingDeque的UML 双向链表实现 节点数据结构 /*...原创 2019-09-17 22:18:59 · 144 阅读 · 0 评论