关于ThreadPoolExecutor的理解

阅读更多

做Java也有4年了,原来对于ThreadPoolExecutor的maximumPoolSize一直存在误解。

public ThreadPoolExecutor(int corePoolSize,
                              int maximumPoolSize,
                              long keepAliveTime,
                              TimeUnit unit,
                              BlockingQueue workQueue)

 假设:corePoolSize=3,maximumPoolSize=5,workQueue的容量为100,有如下调用代码:

 

for (int i = 0; i < 10;i++){
             executorService.execute(new Runnable(){

                 @Override
                 public void run() {
                     System.out.println("1:"+ new Date());
                     try {
                         Thread.sleep(1000*3);
                     } catch (InterruptedException e) {
                         e.printStackTrace();
                     }
                 }
             });
         }

 原本以为线程池会创建5个线程来执行任务,结果只有3个线程。开始以为任务数比corePoolSize大时就回创建更多的线程,原来任务超过workQueue的容量之后才会创建更多的线程来执行任务。也就是说如果是无界的队列,那么maximumPoolSize是否设置是无所谓的。

你可能感兴趣的:(ExecutorService)