ThreadPoolExecutor注意事项

1\\那么poolSize、corePoolSize、maximumPoolSize三者的关系是如何的呢?
当新提交一个任务时:
(1)如果poolSize<corePoolSize,新增加一个线程处理新的任务。
(2)如果poolSize=corePoolSize,新任务会被放入阻塞队列等待。
(3)如果阻塞队列的容量达到上限,且这时poolSize<maximumPoolSize,新增线程来处理任务。
(4)如果阻塞队列满了,且poolSize=maximumPoolSize,那么线程池已经达到极限,会根据饱和策略RejectedExecutionHandler拒绝新的任务。

所以通过上面的描述可知corePoolSize<=maximumPoolSize,poolSize<=maximumPoolSize;而poolSize和corePoolSize无法比较,poolSize是有可能比corePoolSize大的。
--------------------- 
作者:Bennu-Cui 
原文:https://blog.csdn.net/chzphoenix/article/details/78968075 
2\拒绝策略

◇DiscardOldestPolicy
这个策略从字面上也很好理解,丢弃最老的。也就是说如果队列满了,会将最早进入队列的任务删掉腾出空间,再尝试加入队列。
因为队列是队尾进,队头出,所以队头元素是最老的,因此每次都是移除对头元素后再尝试入队。
源码如下:
        public void rejectedExecution(Runnable r, ThreadPoolExecutor e) {
            if (!e.isShutdown()) {
                //移除队头元素
                e.getQueue().poll();
                //再尝试入队
                e.execute(r);
            }
        }

--------------------- 
原文:https://blog.csdn.net/jgteng/article/details/54411423 

3、http://www.cnblogs.com/xiohao/p/4861163.html

猜你喜欢

转载自blog.csdn.net/wuhenzhangxing/article/details/85212897
今日推荐