
java源码阅读
我不会回来的
这个作者很懒,什么都没留下…
展开
-
JUC源码阅读之AbstractQueueSynchronizer(二)
1. node节点node用于组成一个等待队列,每个node在其前驱节点被release后被通知。队列中的第一个线程会尝试去获取锁,但是第一不一定代表能获取成功。ConditonObject也使用了同样node,但是他们单独使用了一条链接。在await操作后,一个节点被加入到condition队列。在signal操作之后,这个节点会被移动到正常的AQS队列。 static fina原创 2018-01-09 23:25:26 · 280 阅读 · 0 评论 -
JUC源码阅读之ReentrantLock-AQS独占模式的典型实现
ReentrantLock是一个可以重入的互斥(独占)锁,支持公平锁和不公平锁(默认)。他的内部实现主要是有一个Sync内部类,具体情况我们注意阅读源码进行分析。1.SyncSync是一个实现了AQS的内部类,他还有FairSync和NonFairSync两种实现。Sync是这个锁的基础,使用了AQS中的state来表示当前拥有的锁的数量(因为是重入锁,可能被多次lock)。原创 2018-01-11 22:27:46 · 381 阅读 · 0 评论 -
JUC源码阅读之CountDownLatch-AQS共享模式的典型实现
CountDownLatch是一个同步辅助类,在一组其他线程完成操作之前,它允许一个或多个线程等待。1.Sync内部类这个内部类继承了AQS,实现了AQS的共享模式下的几个模板方法 private static final class Sync extends AbstractQueuedSynchronizer { private static final lo原创 2018-01-11 23:35:36 · 208 阅读 · 0 评论 -
JUC源码阅读之ReentrantReadWriteLock-AQS的典型实现(三)
ReentrantReadWriteLock即实现了AQS的独占模式(写锁),又实现了共享模式(读锁)1.源码中关于这个类的说明的摘录。它是利用ReentrantLock实现了ReadWriteLock接口。虽然他不会给所有的读锁和写锁的获取者一个顺序,但是它支持可选的公平策略。默认的非公平策略:一个非公平锁可能会一直推迟读或者写的线程,但是他有比公平锁更高的吞吐量。公平策略:释放原创 2018-01-12 21:36:51 · 265 阅读 · 0 评论 -
JUC源码阅读之Semaphore-AQS共享模式的典型实现(四)
1.Semaphore类注释摘抄将信号量初始化为 1,使得它在使用时最多只有一个可用的许可,从而可用作一个相互排斥的锁。这通常也称为二进制信号量,因为它只能有两种状态:一个可用的许可,或零个可用的许可。按此方式使用时,二进制信号量具有某种属性(与很多 Lock 实现不同),即可以由线程(其他线程)释放“锁”,而不是由所有者(因为信号量没有所有权的概念)。在某些专门的上下文(如死锁恢复)中这会很原创 2018-01-15 22:47:28 · 164 阅读 · 0 评论 -
JUC源码阅读之CyclicBarrier-AQS的典型实现(五)
1、类注释摘抄对于失败的同步尝试,CyclicBarrier 使用了一种要么全部要么全不 (all-or-none) 的破坏模式:如果因为中断、失败或者超时等原因,导致线程过早地离开了屏障点,那么在该屏障点等待的其他所有线程也将通过 BrokenBarrierException(如果它们几乎同时被中断,则用 InterruptedException)以反常的方式离开。2、源码中的主要方原创 2018-01-15 23:33:03 · 330 阅读 · 0 评论 -
JUC源码阅读之AbstractQueueSynchronizer(一)
AQS(AbstractQueuedSynchronizer)是java.util.concurrent包中的一个基础类,很多并发的工具类都是利用他进行的开发,比如ReetrantLock、Semphore、线程池等等。所以在这里我把AQS的源码进行了整理和阅读,这只是理解整个juc包的一个基础,要想掌握AQS,还需要通过和他的实现类相结合来理解,这篇文章算是本人学习jdk并发源码的第一篇学习笔记原创 2018-01-09 00:42:19 · 359 阅读 · 0 评论