我们有ThreadPoolExecutor,它的初始化看起来如下:
LinkedBlockingQueue<Runnable> queue = new LinkedBlockingQueue<Runnable>();
ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(maxThreads, maxThreads, 50000L, TimeUnit.MILLISECONDS, queue);maxThreads值为200,但总有一段时间queue.size() > 200。为什么会这样?
发布于 2016-02-22 15:30:44
corePoolSize和maximumPoolSize决定池的大小,计算的是BlockingQueue的大小。
如果使用LinkedBlockingQueue,这是基于链接结构的,并且具有默认的最大Integer.MAX_VALUE大小。它还允许您通过传递所需的大小来使用其构造函数更改其最大大小,如下所示:
LinkedBlockingQueue<Runnable> queue = new LinkedBlockingQueue<Runnable>(200);通过在构造函数中传递200个任务,池最多可以容纳200个任务。
发布于 2016-02-22 15:30:07
maxThreads表示池线程的最大数目。队列大小表示待执行的已排队任务的数量。
https://stackoverflow.com/questions/35557436
复制相似问题