![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JUC
文章平均质量分 78
delicious__z
这个作者很懒,什么都没留下…
展开
-
CountDownLatch和CyclicBarrier 解析
CountDownLatch和CyclicBarrier都是线程同步的方式,比如多线程有特定的作业顺序的场景.CountDownLatch如何使用doSomethingElse(); // don't let run yetstartSignal.countDown(); // let all threads proceeddoSomethingElse();doneSignal.await(); // wait for all to fini原创 2021-05-18 15:39:00 · 96 阅读 · 0 评论 -
BlockingQueue源码阅读
接下来我准备阅读BlockingQueue的源码。BlockingQueue,顾名思义,线程安全的队列。有多种实现,不同实现适用于不同的场景。下面这张图是对阻塞队列方法的总结,分为 会抛出异常的/返回特定值的/阻塞的/超时返回的。Java的线程安全集合类都保证了这一happens before语义:如果写入的结果保证对另一线程可见,必须要保证写happens-before读。...原创 2021-05-14 16:12:19 · 1064 阅读 · 2 评论 -
ThreadPoolExecutor 源码阅读
ThreadPoolExecutor多线程编程基本上都要用到线程池。首先为什么需要线程池,而不是每次都new一条线程?任务与线程解耦复用线程,减小创建和销毁的开销利于管理线程,线程是一种创建、维护和销毁都要比较谨慎的资源从最顶层接口开始,看看结构是怎么样的。ExecutorExecutor接口只有一个excute方法,就是一个可以执行任务的执行器。ExecutorService提交异步任务后返回的是Future提供了一些管理该执行器的方法AbstractExecutorS原创 2021-03-11 17:27:01 · 136 阅读 · 0 评论 -
AQS原理解析
AQSAQS这个类定义了一套多线程访问共享资源的同步器框架,AQS是整个JUC包的基石,JUC包内几乎所有线程间同步的组件都依赖于AQS。AQS建议实现类定义为非public的内部类。因为AQS其实是一个抽象的同步器,一个同步框架,封装了通用的同步逻辑,大多数时候实现类可以看成一个适配器,比如ReentrantLock中的Sync修饰关键字为static final.CLH队列CLH队列是AQS的核心组件。AQS将每个等待锁的线程封装成Node结点,并维护由这些Node组成的CLH队列(可以看成一原创 2021-03-03 14:23:42 · 142 阅读 · 0 评论 -
ReentrantLock源码解读
ReentrantLock就是一个可重入的、互斥的锁。可重入性ReentrantLock是一个可重入的锁。获取锁的方法基本上都有这么一段代码:尝试重入,如果重入次数超过最大值则抛出异常。公平与非公平ReentrantLock 持有一个AQS同步器,AQS同步器Sync是一个抽象类,有公平和非公平两种实现,所以ReentrantLock可以是公平锁也可以是非公平锁。ReentrantLock的主要逻辑都在同步器Sync中实现。tryLock()方法是立即返回的,如果获取锁成功返回true否则原创 2021-02-28 14:07:24 · 180 阅读 · 0 评论 -
JUC源码分析-序章
注意到ReentrantLock 内定义了一个抽象内部类Sync,所以先从Sync开始分析。Sync类图:顶级接口 AbstractOwnableSynchronizerAbstractOwnableSynchronizerpublic abstract class AbstractOwnableSynchronizer implements java.io.Serializable { private static final long serialVersionUID = 3原创 2021-02-24 21:10:14 · 123 阅读 · 0 评论