本文共 1402 字,大约阅读时间需要 4 分钟。
线程池的运行状态通过 ctl 中的高3位来表示,共有5种状态:
terminated() 方法已执行完成。线程池的核心池大小为 corePoolSize,最大允许线程数为 maximumPoolSize,线程活跃时间为 keepAliveTime。
线程池的任务执行流程分为几个关键步骤:
execute(Runnable command)
corePoolSize,如果是,则直接调用 addWorker。workQueue 中。addWorker。addWorker(Runnable firstTask, boolean core)
CAS 操作增加运行线程数。Worker 实例,线程通过 ThreadFactory 构造,并将 Worker 的 run() 方法设置为线程的初始目标。runWorker(Worker w)
getTask() 获取任务。beforeExecute 方法。afterExecute 方法。getTask()
ctl.get() 获取当前线程池状态 c。runStateOf(c) 判断线程池状态: SHUTDOWN 或 STOP 且工作队列为空,减少运行线程数并返回 null。wc。null。线程池支持带返回值的任务执行,主要通过 Future 实现。具体方法如下:
public Future submit(Callable task) { if (task == null) throw new NullPointerException(); RunnableFuture ftask = newTaskFor(task); execute(ftask); return ftask;}public Future submit(Runnable task) { if (task == null) throw new NullPointerException(); RunnableFuture ftask = newTaskFor(task, null); execute(ftask); return ftask;} RunnableFuture 中,并通过 execute 方法提交执行。RunnableFuture 实现了 Future 接口,可以用来获取任务的执行结果。转载地址:http://boufz.baihongyu.com/