ThreadPoolExecutor线程池默认阻塞队列的大小
时间: 2023-11-02 20:59:38 浏览: 210
ThreadPoolExecutor线程池的默认阻塞队列大小为Integer.MAX_VALUE,即无界队列。这意味着当任务提交到线程池时,如果线程池的线程数已达到核心线程数(corePoolSize)的上限,而阻塞队列又未满,则任务会被添加到阻塞队列中等待执行。由于队列大小为无限大,所以不会造成任务被拒绝执行。当阻塞队列已满时,才会创建新的线程执行任务。
相关问题
ThreadPoolExecutor线程池有哪些参数?
ThreadPoolExecutor线程池有以下参数:
1. corePoolSize:核心线程数,即线程池中始终保持的线程数,即使它们处于空闲状态也不会被回收。
2. maximumPoolSize:最大线程数,即线程池中允许存在的最大线程数,包括空闲线程和阻塞队列中等待的线程。
3. keepAliveTime:线程空闲时间,即当线程池中的线程数量大于核心线程数时,空闲线程的存活时间。
4. TimeUnit:时间单位,用于指定keepAliveTime参数的时间单位。
5. workQueue:工作队列,用于存放等待执行的任务,可以选择不同类型的队列,如ArrayBlockingQueue、LinkedBlockingQueue、SynchronousQueue等。
6. ThreadFactory:线程工厂,用于创建线程,默认情况下使用Executors.defaultThreadFactory()方法创建线程。
7. RejectedExecutionHandler:拒绝策略,用于处理无法执行的任务,默认情况下使用AbortPolicy策略,即抛出RejectedExecutionException异常。其他策略还包括DiscardPolicy、DiscardOldestPolicy和CallerRunsPolicy。
线程池默认的拒绝策略
线程池的默认拒绝策略是指当线程池中的任务队列已满,并且所有工作线程都处于忙碌状态时,新任务如何处理的一种策略。在Java的Executor框架中,包括ThreadPoolExecutor这个核心类,有几种常见的拒绝策略:
1. **AbortPolicy**(默认策略):这是最简单的策略,当达到最大并发数并拒绝新任务时,会抛出RejectedExecutionException异常。这意味着程序需要捕获这个异常并采取适当的措施,比如限制请求速率或者回滚操作。
2. **CallerRunsPolicy**:在这种策略下,新来的任务不会加入到队列,而是直接由调用它的那个线程(通常主线程)去执行,可能会阻塞UI线程导致界面卡顿。
3. **DiscardOldestPolicy**:线程池会丢弃最早进入的任务,然后尝试再次提交新任务给空闲的工作线程。
4. **DiscardPolicy**:与 DiscardOldestPolicy 类似,但是它会简单地丢弃新来的任务,而不考虑任务的年龄。
开发者可以根据实际情况选择合适的拒绝策略,或者自定义拒绝策略。在设置ThreadPoolExecutor时,可以使用`ThreadPoolExecutor.setRejectedExecutionHandler(Runnable r)`方法来配置拒绝策略。
阅读全文