我们有ThreadPoolExecutor,其初始化如下:
LinkedBlockingQueue<Runnable> queue = new LinkedBlockingQueue<Runnable>();
ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(maxThreads, maxThreads, 50000L, TimeUnit.MILLISECONDS, queue);
maxThreads
的值为200,但有queue.size()
&gt;的时间。 200.为什么会这样?
答案 0 :(得分:0)
maxThreads
表示池化线程的最大数量。
您的队列大小表示要执行的已排队任务的数量。
答案 1 :(得分:0)
corePoolSize
和maximumPoolSize
决定了游泳池的大小,它是BlockingQueue
的大小。
您使用的是LinkedBlockingQueue
,它基于链接结构,默认最大大小为Integer.MAX_VALUE
。它还允许您通过传递所需的大小来使用其构造函数更改其最大大小,如下所示:
LinkedBlockingQueue<Runnable> queue = new LinkedBlockingQueue<Runnable>(200);
通过在其构造函数中传递200,您的池将最多包含200个任务