队列同步器(AbstractQueuedSynchronizer)源码分析

AbstractQueuedSynchronizer(队列同步器)在Java并发工具中经常被用到,比如说我们常用的CountDownLatchReentrantLockReentrantReadWriteLockSemaphore等等并发工具类底层都是基于队列同步器的,只有掌握了队列同步器底层的工作原理才能更好的理解其他的并发工具的工作机制,这篇文章将会从源码的角度分析队列同步器的工作原理。

Guide to the Java Phaser

Java 7中新增了一个灵活的线程同步栅栏—Phaser,如果你需要在执行某些任务之前等待其他任务执行到某个状态,那么Phaser是一个很好的选择,这篇文章将介绍java.util.concurrent.Phaser,它和CountDownLatch具有相似的功能,但是Phaser更灵活。

Dubbo路由机制分析

深入研究Java阻塞队列实现

Java线程池分析

基于ThreadPoolExecutor构造线程池

我们来看一下ThreadPoolExecutor类的构造函数,一共需要传入7个参数,下面的注释中有详细的解释:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
public ThreadPoolExecutor(int corePoolSize,
int maximumPoolSize,
long keepAliveTime,
TimeUnit unit,
BlockingQueue<Runnable> workQueue,
ThreadFactory threadFactory,
RejectedExecutionHandler handler) {
//先判断参数是否合法
if (corePoolSize < 0 ||
maximumPoolSize <= 0 ||
maximumPoolSize < corePoolSize ||
keepAliveTime < 0)
throw new IllegalArgumentException();
if (workQueue == null || threadFactory == null || handler == null)
throw new NullPointerException();
this.acc = System.getSecurityManager() == null ?
null :
AccessController.getContext();
//核心线程数量
this.corePoolSize = corePoolSize;
//最大线程数量
this.maximumPoolSize = maximumPoolSize;
//工作队列
this.workQueue = workQueue;
//保活时间,unit为时间单位,转换为秒
this.keepAliveTime = unit.toNanos(keepAliveTime);、
//线程工厂
this.threadFactory = threadFactory;
//拒绝策略
this.handler = handler;
}

工作队列使用的是一种阻塞队列,关于阻塞队列的实现我将会在另一片文章中详细讲解

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×