之前阅读过了 ReentrantLock
与 ReentrantReadWriteLock
的源码,我们都发现其继承了 AbstractQueuedSynchronizer
类,平常我们说的 AQS 就是 AbstractQueuedSynchronizer
的简称。其实在我们的juc包下,很多的工具都是依赖于它,今天我们就将了解下AQS的魅力。
前边聊过 ReentrantLock
互斥锁,知道在并发情况下锁竞争的时候通过 CAS 在竞争锁。那在多线程环境下,如何平衡数据一致性与并发性能?ReentrantReadWriteLock 通过读写分离策略给出了优雅的解决方案。
在多线程编程中,锁是保证线程安全的核心机制之一。Java除了提供 synchronized
关键字外,还通过 java.util.concurrent.locks 包提供了更灵活的锁实现。ReentrantLock
是Java并发包中一个重要的锁实现,它提供了比 synchronized
更灵活的锁操作。接下来我们深入了解下Java中的可重入锁。
在开始以前,先思考下什么是线程创建有哪几种方式,为了避免频繁创建和销毁线程造成不必要的性能,一般在使用线程时,会采用线程池,那什么是线程池呢?
上文聊到 CompletableFuture
内置了 ForkJoinPool
线程池,我们推荐使用自定义线程池,那这两种有什么区别呢?接下来我将对 ForkJoinPool 架构揭秘包括工作窃取算法、核心组件和任务提交与执行过程,了解以下这个专为可分解任务设计的线程池。