简单理解java线程池ThreadPoolExecutor
2017-05-14 本文已影响0人
MrSoloLife
这里关于如何使用线程池,暂且不说,仅探究其原理。
线程池的构造函数,仅仅是初始化线程池,不会创建任何线程,线程池里有一个worker类,该类我们可以理解为工作机器人(这样更形象),当调用线程池的execute()提交任务时,在该方法中会调用线程池的addWorker()方法创建并运行worker也就是会生产出工作机器人并启动它,如果worker达到限制数量则将任务添加到缓存队列中,(下面所有worker均用 工作机器人 或者机器人代替,便于理解)在机器人里面已经写好了一些控制方法,使得机器人具有以下主要功能,
1 如果当前任务执行完了就会自动从任务缓存队列中取走任务去执行。
2 如果任务缓存队列中没有任务,那么机器人会自动关闭并销毁。
其他功能如记录它完成任务的数量等。在取任务的方法中如果缓存池中没有任务,那么会延时keepAliveTime时间后去取,如果还没有任务机器人就会关闭并销毁,在关闭销毁时会矫正线程池完成任务的数量。
线程池的缓存队列大小可自己设定,达到预设大小时的处理方法也可以自己设定,其他的,线程池工作机器人的数量(线程数)和机器人空闲时的存活时间也可以设定,还有用来创建机器人启动按钮的方法也可以自己设定,这个启动按钮就是机器人内部的工作线程。这个线程在机器人初始化时会调用线程工厂去创建。
如果想要详细理解可以根据这个思路去看ThreadPoolExecutor类。
作为新手有哪些不足之处请多多包涵。