![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
JUC
文章平均质量分 90
java并发包
sinat_33472737
这个作者很懒,什么都没留下…
展开
-
StampedLock浅析(二)
队列示例按照如下顺序获取锁:写节点1 、读节点1 、读节点2、 读节点3、 写节点2 、读节点4 、读节点5结论:写线程入队直接插入队尾 读节点入队,如果队尾是写节点,直接插入到队尾。如果是读节点,插入到队尾节点的cowait链中。插入是按照栈的结构插入,即后进先出。 唤醒带有cowait链的读节点时,会唤醒所有链上的读节点,按照后进先出的顺序依次唤醒。只有当所有读节点都释放锁时,才会唤醒下一个写节点节点状态0:初始状态-1:等待中(由后驱节点设置,和AQS中一...原创 2021-03-31 12:52:44 · 135 阅读 · 0 评论 -
ReentrantReadWriteLock源码浅析
一、ReadWriteLock概述ReadWriteLock维护一对关联的locks ,一个用于只读操作,一个用于写操作。 只要没有写程序, read lock就可以同时由多个read lock线程保持。 write lock是排他的。所有ReadWriteLock实现都必须保证writeLock操作(在Lock接口中指定)的内存同步效果对于关联的readLock也保持不变。 也就是说,成功获取读锁的线程将看到在先前释放写锁时所做的所有更新。与互斥锁相比,读写锁在访问共享数据时允许更高级别的并发性。原创 2021-03-25 11:24:07 · 200 阅读 · 0 评论 -
CountDownLatch共享锁源码分析
CountDownLatch作用于使用场景不做说明,可看下其它文章。这里只分析源码。await方法public void await() throws InterruptedException { sync.acquireSharedInterruptibly(1);}直接调用AbstractQueuedSynchronizer的acquireSharedInterruptibly方法 public final void acquireSharedInterruptibly(...原创 2021-03-19 13:35:33 · 166 阅读 · 0 评论 -
JUC中Condition分析
一、概述Condition将Object监控器方法( wait , notify和notifyAll )分解为不同的对象,通过将它们与任意Lock实现结合使用,可以使每个对象具有多个等待集。 当“ Lock替换了synchronized方法和语句的使用时,“ Condition替换了“对象”监视器方法的使用。Conditions条件(也称为条件队列或条件变量)提供了一种手段,为一个线程暂停执行(“等待”)直到另一线程通知某些状态条件现在为真。 由于对该共享状态信息的访问发生在不同的线程中,因此必须对原创 2021-03-17 11:23:28 · 499 阅读 · 0 评论 -
ReentrantLock源码浅析
ReentrantLock内部有两个类都继承了ReentrantLock中非公共内部帮助器类Sync,分别是NonfairSync(非公平同步器)和FairSync(公平的同步器)。默认使用的是NonfairSync。ReentrantLock是以独占的方式获取锁,所以需要重写tryAcquire、tryRelease、isHeldExclusively这3个方法。一、加锁static...原创 2020-04-21 14:28:41 · 121 阅读 · 0 评论 -
AbstractQueuedSynchronizer Node文档翻译
一、概述等待队列是“ CLH”(Craig,Landin和Hagersten)锁定队列的变体。 CLH锁通常用于自旋锁。相反,我们使用它们来做阻塞同步器,但是使用相同的基本策略,即在其节点的前身中保存有关线程的某些控制信息。每个节点中的“状态”字段跟踪线程是否应阻塞。节点的前任释放时会发出信号。否则,队列的每个节点都充当特定通知样式的监视器,其中包含单个等待线程。虽然状态字段不...原创 2020-05-19 12:29:44 · 225 阅读 · 0 评论 -
AbstractQueuedSynchronizer文档翻译
一、概述 提供一个框架,以实现依赖于先进先出(FIFO)等待队列的阻塞锁和相关同步器(信号量,事件等)。此类旨在为大多数依赖单个原子int值表示状态的同步器提供有用的基础。子类必须定义更改此状态的受保护方法,并且定义该状态对于获取或释放此对象而言意味着什么。鉴于这些,此类中的其他方法将执行所有排队和阻塞机制。子类可以维护其他状态字段,但只是为了获得同步而只追踪使用 get...原创 2020-04-20 18:04:34 · 243 阅读 · 0 评论 -
StampedLock浅析(一)
一种基于功能的锁,具有三种模式来控制读/写访问。 StampedLock的状态由版本和模式组成。 锁获取方法返回一个戳记(stamp),表示锁状态的访问控制; 这些方法的“尝试”版本可能会返回特殊值零,以表示无法获取访问权限。 锁释放和转换方法需要使用戳记作为参数,如果它们与锁的状态不匹配,则会失败。三种模式是: 写。方法writeLock可能会阻塞以等待独占访问,返回可以在方法unlockWrite使用的戳记stamp以释放锁。还提供了tryWriteLock不定时版本和定时版本。 当锁保持在写原创 2021-03-30 12:53:48 · 374 阅读 · 0 评论