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