以前记的笔记。
PooledExecutor基本以一个Channel以及一组Worker-Thread对组成。
Channel负责缓存目标请求(目标请求也是Runable接口的实现)以及“存”“取”。Channel是一个可以阻塞的Queue,他有4个 方法。其中offer put 方法用来放入元素。poll take方法来获取数据。offer以及poll方法都是可以设定超时的阻塞方法。一旦超时则会将不再等待,并返回false。 PooledExecutor主要使用0等待的的offer以及poll。
每一组W-T中的W(Runable的实现)成为目标请求的代理执行者,由T来负责真正启动执行。而执行的时候是由T来驱动其内部的W进行工作的。在一组W-T中Worker作为key、Thread作为value,形成字典形式。
工作基本流程基本如下:T中的W不断的从Channel中取请求(command 也应该是Runable的实现)。如果没有请求,则等待或结束自己的运行。而每次放入请求时,都会检查(根据最大最小值的设定)是否需要多生成一个W-T 对(PooledExecutor.addThread()方法);如果不需要则会直接放入Channel(Channel.offer方法);如果需要 则会生成,并直接把自己给新生成的W。
![](https://p-blog.csdn.net/images/p_blog_csdn_net/wfeng007/EntryImages/20081012/Executor_frame.jpg)
元代码分析与注释: execute方法。
- //将command放入线程池等待以及执行。
- /**
- * Arrange for the given command to be executed by a thread in this
- * pool. The method normally returns when the command has been
- * handed off for (possibly later) execution.
- **/