java并发
文章平均质量分 94
心有九月星辰
这个作者很懒,什么都没留下…
展开
-
AQS讲解
AQS是一个并发的得同步器.JUC包下的ReentrantLock,Semaphore,ReentrantReadWriteLock,SynchronousQueue,FutureTask等底层都是基于AQS实现的.我们也可以通过AQS实现自己的并发工具类.原创 2024-10-04 19:51:04 · 678 阅读 · 0 评论 -
Semaphore源码讲解
Semaphore称为计数信号量,当线程来访问资源的时候,只有获得许可才可以成功来访问资源.原创 2024-10-01 10:40:49 · 1437 阅读 · 0 评论 -
CyclicBarrier源码分析
说明: 由于ReentrantLock的默认采用非公平策略,所以在dowait函数中调用的是ReentrantLock.NonfairSync的lock函数,由于此时AQS的状态是0,表示还没有被任何线程占用,故main线程可以占用,之后在dowait中会调用trip.await函数,最终的结果是条件队列中存放了一个包含main线程的结点,并且被禁止运行了,同时,main线程所拥有的资源也被释放了,可以供其他线程获取。头节点与尾节点均指向它。此函数的作用是损坏当前屏障,会唤醒所有在屏障中的线程。原创 2024-09-22 14:35:56 · 834 阅读 · 0 评论 -
CountDownLatch源码分析
从源码可知,其底层是由AQS提供支持,所以其数据结构可以参考AQS的数据结构,而AQS的数据结构核心就是两个虚拟队列: 同步队列sync queue 和条件队列condition queue,不同的条件会有不同的条件队列。CountDownLatch典型的用法是将一个程序分为n个互相独立的可解决任务,并创建值为n的CountDownLatch。当每一个任务完成时,都会在这个锁存器上调用countDown,等待问题被解决的任务调用这个锁存器的await,将他们自己拦住,直至锁存器计数结束。原创 2024-09-21 22:08:07 · 660 阅读 · 0 评论