林烟夜暖

阅读JDK、框架源码的总结,微服务、RPC、服务治理实践等

AbstractExecutorService源码分析

AbstractExecutorService

AbstractExecutorService源码分析 AbstractExecutorService的类图如下: AbstractExecutorService抽象类实现了Executor和ExecutorService接口,提供了ExecutorService执行方法的默认实现。AbstractExecutorService使用newTaskFor方法返回的RunnableFut...

FutureTask源码分析之预备知识

预备知识

FutureTask源码分析之预备知识 FutureTask 实现了Future语义,表示了一种抽象的可生成结果的计算。在包括线程池在内的许多工具类中都会用到,弄懂它的实现将有利于深入理解Java异步操作的实现。FutureTaask的继承类图如下: 可以看到FutureTask实现了RunableFuture接口,而RunableFuture接口继承自Runnbale、Future...

FutureTask源码分析之深入理解FutureTask

深入理解

FutureTask源码分析之深入理解FutureTask 接上一篇预备知识之后,下面开始分析FutureTask的工作原理(基于JDK 1.8)。 一、Future和Task FutureTask包含了Future和Task两部分。上一篇说过,FutureTask实现了RunnableFuture接口,即Runnable接口和Future接口。其中Runnable接口对应了Futur...

LongAdder源码分析

LongAdder/LongAccumulator/DoubleAdder/DoubleAccumulator

LongAdder源码分析 LongAdder是jdk8新增的用于并发环境的计数器,目的是为了在高并发情况下,代替AtomicLong/AtomicInteger,成为一个用于高并发情况下的高效的通用计数器。LongAdder与LongAccumulator/DoubleAdder/DoubleAccumulator类似,都继承于Striped64父类,依赖于其核心逻辑。 下面先分析父类...

AtomicXXXArray源码分析

AtomicIntegerArray、AtomicLongArray、AtomicReferenceArray

AtomicXXXArray源码分析 AtomicXXXArray主要包括AtomicIntegerArray、AtomicLongArray、AtomicReferenceArray这三个类,底层操作同样是Unsafe这个类,关于这个类的使用可参考sun.misc.Unsafe使用指南这篇文章。由于三者原理类似,下面以AtomicLongArray为例进行实现分析。 一、源码分析 p...

AtomicXXX源码分析

AtomicBoolean,AtomicInteger,AtomicLong,AtomicReference

AtomicXXX源码分析 AtomicXXX主要包含AtomicBoolean,AtomicInteger,AtomicLong,AtomicReference这几种类型,这几种类型的变量相对于普通变量的区别,主要体现在读写的线程安全上。对原子变量的写是原子的(比如多线程下的共享变量i++就不是原子的),由CAS操作保证原子性。对原子量的读可以读到最新值,由volatile关键字来...

Semaphore源码分析

Semaphore

Semaphore源码分析 Semaphore(信号量)是常用的并发工具之一,常常用于流量控制。通常情况下,公共的资源常常是有限的,例如数据库的连接数。使用Semaphore可以帮助我们有效管理这些有限资源的使用。 Semaphore的结构和ReentrantLock以及CountDownLatch类似,内部采用了公平锁与非公平锁两种实现,基于AQS共享锁机制。 一、核心属性 与Co...

CyclicBarrier源码分析

CyclicBarrier

CyclicBarrier源码分析 CountDownLatch源码分析这篇文章分析了基于AQS共享锁实现的CountDownLatch,下面分析一下与CountDownLatch类似的同步工具CyclicBarrier。 CyclicBarrier的字面意思是可循环使用(Cyclic)的屏障(Barrier)。它使得一组线程到达一个屏障(同步点)时被阻塞,直到最后一个线程到达屏障时,屏...

CountDownLatch源码分析

CountDownLatch

CountDownLatch源码分析 CountDownLatch是一个很有用的工具,latch是门闩的意思,该工具是为了解决某些操作只能在一组操作全部执行完成后才能执行的情景。CountDown是倒数计数,所以CountDownLatch的用法通常是设定一个大于0的值,该值即代表需要等待的总任务数,每完成一个任务后,将总任务数减一,直到最后该值为0,说明所有等待的任务都执行完了,“门闩”...

LockSupport源码分析

LockSupport

LockSupport源码分析 LockSupport是用来创建锁和其他同步类的基本线程阻塞原语。简而言之,当调用LockSupport.park时,表示当前线程将会等待,直至获得许可,当调用LockSupport.unpark时,必须把等待获得许可的线程作为参数进行传递,才能让此线程继续运行。 一、LockSupport分析 1.属性 // Hotspot implementati...