j ava线程池核心参数
时间: 2023-11-14 14:57:04 浏览: 33
Java线程池有以下几个核心参数:
1. corePoolSize:线程池核心线程数,即线程池中保持的最少线程数。如果线程池中的线程数少于corePoolSize,即使空闲状态,也会创建新的线程来处理任务,直到线程数达到corePoolSize。
2. maximumPoolSize:线程池中最大线程数。当线程池中的线程数达到corePoolSize时,如果队列满了,就会继续创建新的线程,直到线程数达到maximumPoolSize。如果此时还有更多的任务需要处理,会触发RejectedExecutionHandler。
3. keepAliveTime:非核心线程闲置超时时间,超过这个时间就会被回收。默认情况下,只有当线程池中的线程数大于corePoolSize时才会启用此参数。
4. unit:keepAliveTime的时间单位。
5. workQueue:任务队列,用于保存等待执行的任务。常用的有以下几种:
- ArrayBlockingQueue:基于数组实现的有界队列,按照FIFO(先进先出)原则对任务进行排序。
- LinkedBlockingQueue:基于链表实现的无界队列,按照FIFO原则对任务进行排序。
- SynchronousQueue:不存储元素的阻塞队列,每个插入操作必须等待另一个线程的移除操作,反之亦然。
6. threadFactory:线程工厂,用于创建新线程。默认情况下,线程池会使用Executors类的默认线程工厂。
7. handler:拒绝策略,用于处理无法处理的任务。默认情况下,线程池会使用AbortPolicy(抛出RejectedExecutionException)来处理无法处理的任务。其他的拒绝策略还包括:
- CallerRunsPolicy:由提交任务的线程来执行此任务。
- DiscardPolicy:直接丢弃无法处理的任务。
- DiscardOldestPolicy:丢弃最老的一个任务。