
JUC源码分析
关于Java并发包的源码分析
吃琛了
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
JUC源码解析九:基本数据类型的原子类
一、AtomicInteger如果你学过JVM内存模型你应该知道原子性以及可见性的概念,在对于一个基本类型的修改中,上述两种原则体现在:一个参数的自增操作其实使用了三条原句方才完成,而在并发条件下,在微观下你不能够保证三条原句能够依次执行而中间没有插入对该参数的其他修改操作。一个字段需要将高速缓存块中的数据刷新到内存中并且使其他CPU高速缓存行中的相应数据失效。想要详细了解的可以了解下...原创 2019-04-26 12:32:55 · 325 阅读 · 0 评论 -
JUC源码解析八:ReentrantReadWriterLock读写锁源码解析
一 前言ReentrantReadWriterLock这个类顾名思义就是一个同时支持读锁与写锁的可重入类。跟ReentrantLock相比不仅多了读锁的可共享锁,还对读与写进行了分类,在内部对其进行协调(读锁升级为写锁、写锁降级为读锁)。另外读写锁最多支持2^16-1个递归写入锁和2^16-1个递归读取锁,相比ReentrantLock的2^32-1少了很多,原因则是ReentrantReadW...原创 2019-04-10 00:49:56 · 328 阅读 · 0 评论 -
JUC源码解析七:Semaphore源码解析
一 前言Semaphore(信号量)是用来控制同时访问特定资源的线程数量,它通过协调各个线程,以保证合理的使用公共资源。使用Semaphore可以同时允许指定的线程数量同时执行,超过该数量的线程必须等待直到有线程执行完其任务。特别说明的是信号量只是在信号不够的时候挂起线程,但是并不能保证信号量足够的时候获取对象和返还对象是线程安全的,所以仍需要锁Lock来保证并发的正确性。将信号量的许可值...原创 2019-04-07 09:55:56 · 218 阅读 · 0 评论 -
JUC源码解析六:CyclicBarrier源码解析
一 前言前面我们学了一次性的闭锁CountDownLatch,下面我们会接触到一个可以循环的同步辅助类:CyclicBarrier,它允许一组线程互相等待,直到到达某个公共屏障点,在涉及一组固定大小的线程的程序中,这些线程必须不时地互相等待。CyclicBarrier类似于CountDownLatch的地方是它本身也是个计数器,用以计数的变量则是初始化时传入的变量count。不同点则是Cycl...原创 2019-04-05 20:16:59 · 522 阅读 · 0 评论 -
JUC源码解析五:Latch——闭锁
一 前言闭锁(Latch):一种同步方法,可以延迟线程的进度直到线程到达某个终点状态。可以想象一下在高铁开始验票之前,所有的闸机都是关闭的。这时候把关闭状态的闸机想象成一条被阻塞的线程。当开始验票的时候,所有的闸机也就是线程都被打开唤醒了。而一次验票是一次性的,当闭锁打开之后这个闭锁的状态也就失效了。针对与闭锁在Java中我们常用的是一个CountDownLatch的类,它允许一个或者多个线程...原创 2019-04-03 13:02:16 · 497 阅读 · 0 评论 -
JUC源码解析四:signal()与sgnalAll()方法的层层剥析
一 前言这一次在await()方法的后面讲,所以这里涉及到的一些写过的基础知识就不再重复了。二 signal()还是国际惯例,从入口处出发: // 将Condition的FIFO条件队列中的第一个线程唤醒 public final void signal() { // 若当前线程不持有锁,则抛出异常 if (!isHeldE...原创 2019-04-01 19:13:10 · 809 阅读 · 0 评论 -
JUC源码解析三:await()方法的层层剥析
一、前言Condition是一个接口类,是一个在JUC里面提供于控制线程释放锁, 然后进行等待其他获取锁的线程发送 signal 信号来进行唤醒的工具类。在JDK中一共有两个类实现了该接口,分别是AbstractQueuedSynchronizer和AbstractQueuedLongSynchronizer下面我们主要要讲的是AbstractQueuedSynchronizer类中对Con...原创 2019-04-01 02:05:05 · 465 阅读 · 0 评论 -
JUC源码解析二:unlock()方法的层层剥析
一、前言本次我们以ReentrantLock类来讲解一下unlock()方法的调用。首先我们要清楚RentrantLock是一个独占可重入锁,并且内部实现了公平锁与非公平锁,那么下面就让我们一步步往下看吧。二、正文在ReentrantLock类中我们可以看到有一个unlock()方法: public void unlock() { sync.release(1); ...原创 2019-03-28 17:14:05 · 278 阅读 · 0 评论 -
JUC源码解析一:lock()方法的层层剥析
一、前言本次我们以ReentrantLock类来讲解一下lock()方法的调用。首先我们要清楚RentrantLock是一个独占可重入锁,并且内部实现了公平锁与非公平锁,那么下面就让我们一步步往下看吧。二、正文打开源码我们可以看到,RentrantLock类中,只是实现了Serializable接口,声明了这个类是可序列化的。而内部类静态抽象类Sync继承了AbstractQueuedS...原创 2019-03-28 13:44:41 · 296 阅读 · 0 评论