PooledExecutor 研究(第三方包,当时还没有用jdk5)

PooledExecutor是一个基于Channel和Worker-Thread对的线程池实现。Channel用于缓存和调度任务,Worker线程从中获取并执行任务。当任务提交时,如果线程数量未达到最小值,会创建新的Worker线程;若超过最大值,任务会被加入Channel。Worker线程在无任务时会等待或结束,通过getTask方法从Channel中获取并执行任务。
摘要由CSDN通过智能技术生成
 
以前记的笔记。

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。






元代码分析与注释: execute方法。

  1.  //将command放入线程池等待以及执行。
  2.   /**
  3.    * Arrange for the given command to be executed by a thread in this
  4.    * pool.  The method normally returns when the command has been
  5.    * handed off for (possibly later) execution.
  6.    **/
  7.   
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值