workQueue的大小可以超过maximumPoolSize吗?

时间:2016-02-22 15:23:46

标签: java threadpoolexecutor

我们有ThreadPoolExecutor,其初始化如下:

LinkedBlockingQueue<Runnable> queue = new LinkedBlockingQueue<Runnable>();
ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(maxThreads, maxThreads, 50000L, TimeUnit.MILLISECONDS, queue);

maxThreads的值为200,但有queue.size()&gt;的时间。 200.为什么会这样?

2 个答案:

答案 0 :(得分:0)

maxThreads表示池化线程的最大数量。 您的队列大小表示要执行的已排队任务的数量。

答案 1 :(得分:0)

corePoolSizemaximumPoolSize决定了游泳池的大小,它是BlockingQueue的大小。

您使用的是LinkedBlockingQueue,它基于链接结构,默认最大大小为Integer.MAX_VALUE。它还允许您通过传递所需的大小来使用其构造函数更改其最大大小,如下所示:

LinkedBlockingQueue<Runnable> queue = new LinkedBlockingQueue<Runnable>(200);

通过在其构造函数中传递200,您的池将最多包含200个任务