Mickey 小站

尘世迷途小码农

Deque Source

Deque 源码分析

这篇文章我们来讲一下 ArrayDeque 和 LinkedBlockingDeque 的源码 ArrayDeque 属性 // ArrayDeque 使用数组来存储元素,数组的长度也是 2 的幂次方 // 在 head 和 tail 更改的时候,使用除留余数法来替代取余操作 transient Object[] elements; // 双端队列头部 transient int h...

BlockingQueue Source

BlockiBlockingQueueng 源码分析

这篇 blog 我们来讲一下 BlockingQueue 的几个子类的源码 ArrayBlockingQueue ArrayBlockingQueue 是一个定长的阻塞队列,可以用于实现最基本的生产者 - 消费者模型 属性 // 存放队列元素 final Object[] items; // 下一个 take,poll,peek,remove 操作的元素下标,这个是会循环的,当 t...

FutureTask Source

FutureTask 源码分析

这篇 blog 我们来讲一下 FutureTask 的源码,FutureTask 是 java 实现异步编程的基础 public class FutureTask<V> implements RunnableFuture<V> ... public interface RunnableFuture<V> extends Runnable, Futur...

ReentrantReadWriteLock Source

ReentrantReadWriteLock 源码分析

ReentrantReadWriteLock 源码分析(基于Java 8) 👆这篇 blog 讲解的非常清楚,推荐给大家,这里我自己记录一下个人的感悟 ReentrantReadWriteLock 创建了 ReadLock 类和 WriteLock 类 读锁和写锁是互斥的,写锁不会抢占读锁 当线程获取写锁的时候,是可以继续获取读锁的,这是锁降级,反之则不行,会造成死锁 ...

CyclicBarrier Source

CyclicBarrier 源码分析

这篇 blog 我们来讲一下 CyclicBarrier 的源码,CyclicBarrier 依赖 ReentrantLock 实现功能,感兴趣的同学可以先看看 ReentrantLock 源码分析 CyclicBarrier 用于多个线程的互相等待,当多个线程都做好了准备后,一同开始运行,可以用于系统的初始化,当多个子线程都申请好了资源之后,系统启动 属性 // CyclicBarr...

ReentrantLock Source

ReentrantLock 源码分析

这篇 blog 我们来讲一下 ReentrantLock 的源码,ReentrantLock 是一种依赖 AQS 的可重入排他锁,和 Semaphore 类型,ReentrantLock 也分为公平和非公平两种 Sync Sync 一个抽象类,继承了 AQS abstract static class Sync extends AbstractQueuedSynchronizer { ...

Semaphore Source

Semaphore 源码分析

这篇 blog 我们来讲一下 Semaphore 的源码,Semaphore 允许指定数量的线程同时运行,Semaphore 同样使用 AQS 的共享锁实现 Sync 类 abstract static class Sync extends AbstractQueuedSynchronizer { Sync(int permits) { setState(perm...

CountDownLatch Source

CountDownLatch 源码分析

这篇 blog 我们来讲一下 CountDownLatch 的源码,CountDownLatch 常用于一等多的场景,例如 shutdown 的时候,等待资源释放完毕之类的 CountDownLatch 依赖 AQS 的共享锁实现,因为多个线程可以同时调用 await,当等待的线程全部执行完毕后,调用 await 的线程需要同时被触发 Sync 对象 private static fi...

AQS Source

AQS 源码分析

这篇 blog 我们来讲一下 AQS 的源码,我们知道 JUC 包提供了许多并发相关的类,这些类底层都依赖了 AQS AQS 全称是 AbstractQueuedSynchronizer,顾名思义,是一个用来构建锁和同步器的类,AQS 底层用了 CAS 技术来保证操作的原子性,同时使用 FIFO 的双向队列实现线程间的锁竞争 AQS 属性 private transient volat...

ThreadPoolExecutor Source

ThreadPoolExecutor 源码分析

这篇 blog 来分析一下 ThreadPoolExecutor 的源码,阿里巴巴 Java 开发手册推荐使用 ThreadPoolExecutor 来创建线程池对象,而不推荐使用 Executors,其实 Executors 中的方法也是调用了 ThreadPoolExecutor,不过传入的参数容易导致 OOM 属性 private final AtomicInteger ctl =...