首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

concurrent ThreadPoolExecutor的参数叨明

2012-10-16 
concurrent ThreadPoolExecutor的参数说明public ThreadPoolExecutor(int corePoolSize,int maximumPoolSi

concurrent ThreadPoolExecutor的参数说明
public ThreadPoolExecutor(int corePoolSize,
                          int maximumPoolSize,
                          long keepAliveTime,
                          TimeUnit unit,
                          BlockingQueue<Runnable> workQueue,
                          ThreadFactory threadFactory,
                          RejectedExecutionHandler handler)
这个构造函数 中 最后这个参数 RejectedExecutionHandler handler: 线程池对拒绝任务的处理策略;
详细点说:当 Executor 已经关闭,并且 Executor 将有限边界用于最大线程和工作队列容量,且已经饱和时,在方法 execute(java.lang.Runnable) 中提交的新任务将被拒绝。在以上两种情况下,execute 方法都将调用其 RejectedExecutionHandler 的 RejectedExecutionHandler.rejectedExecution(java.lang.Runnable, java.util.concurrent.ThreadPoolExecutor) 方法

一般都是直接用的new  ThreadPoolExecutor.DiscardOldestPolicy()作为最后一个参数。 

一般常用的handler 有四种预定义的处理程序策略:

A.         在默认的 ThreadPoolExecutor.AbortPolicy 中,处理程序遭到拒绝将抛出运行时 RejectedExecutionException 。

B.         在 ThreadPoolExecutor.CallerRunsPolicy 中,线程调用运行该任务的 execute 本身。此策略提供简单的反馈控制机制,能够减缓新任务的提交速度。

C.         在 ThreadPoolExecutor.DiscardPolicy 中,不能执行的任务将被删除。

D.         在 ThreadPoolExecutor.DiscardOldestPolicy 中,如果执行程序尚未关闭,则位于工作队列头部的任务将被删除,然后重试执行程序(如果再次失败,则重复此过程)。

定义和使用其他种类的 RejectedExecutionHandler 类也是可能的,但这样做需要非常小心,尤其是当策略仅用于特定容量或排队策略时。追问不知道 你用过这个线程池没?我想请教下里面所说的被拒绝的任务是什么意思?什么情况下任务被拒绝?那如果用了 DiscardOldestPolicy()那么 之前最老的任务没有执行完也会被删除吗?
    回答上面已经说过啊,通俗点说两种情况算拒绝:
1 线程池已关闭;
2 线程池已饱和(处于最大线程和工作队列容量)时在以上两种情况下,在方法 execute(java.lang.Runnable) 中提交的新任务将被拒绝。
execute 方法都将调用其 RejectedExecutionHandler 的 RejectedExecutionHandler.rejectedExecution(java.lang.Runnable, java.util.concurrent.ThreadPoolExecutor) 方法

热点排行