线程池
ThreadPoolExecutor(
int corePoolSize,
int maximumPoolSize,
long keepAliveTime,
TimeUnit unit,
BlockingQueue<Runnable> workQueue,
ThreadFactory threadFactory,
RejectedExecutionHandler handler)
参数描述
- corePoolSize: 线程池的核心线程数,当线程池中的线程数大于等于corePoolSize时,新任务将直接加入队列,而不是创建新线程
- maximumPoolSize: 线程池的最大线程数,当线程池中的线程数大于等于maximumPoolSize时,新任务将直接加入队列,而不是创建新线程
- keepAliveTime: 线程池中空闲线程的存活时间,当线程池中的线程数大于等于corePoolSize时,空闲线程在keepAliveTime时间后会被销毁
- unit: keepAliveTime的单位
- workQueue: 线程池的任务队列,当线程池中的线程数小于corePoolSize时,新任务将直接加入workQueue,否则将创建新线程执行任务
- threadFactory: 线程工厂,用于创建线程
- handler: 当线程池中的任务队列满了,且线程池中的线程数大于等于maximumPoolSize时,新任务将交给handler处理
workQueue
- ArrayBlockingQueue: 使用数组实现的有界阻塞队列,当队列满时,新任务将加入队列,阻塞等待,直到队列有空位
- LinkedBlockingQueue: 使用链表实现的有界阻塞队列,当队列满时,新任务将加入队列,阻塞等待,直到队列有空位
- SynchronousQueue: 无缓冲队列,当队列满时,新任务将加入队列,阻塞等待,直到队列有空位
- PriorityBlockingQueue: 使用优先级队列实现的有界阻塞队列,当队列满时,新任务将加入队列,阻塞等待,直到队列有空位
- DelayQueue: 使用延时队列实现的有界阻塞队列,当队列满时,新任务将加入队列,阻塞等待,直到队列有空位
- LinkedTransferQueue: 使用链表实现的无界阻塞队列,当队列满时,新任务将加入队列,阻塞等待,直到队列有空位
threadFactory
- Executors.defaultThreadFactory: 使用默认的线程工厂创建线程
- Executors.privilegedThreadFactory: 使用默认的线程工厂创建线程,并且具有权限
handler
- ThreadPoolExecutor.AbortPolicy: 当线程池中的任务队列满了,且线程池中的线程数大于等于maximumPoolSize时,新任务将交给handler处理,handler将抛出RejectedExecutionException异常
- ThreadPoolExecutor.DiscardPolicy: 当线程池中的任务队列满了,且线程池中的线程数大于等于maximumPoolSize时,新任务将交给handler处理,handler将丢弃任务
- ThreadPoolExecutor.DiscardOldestPolicy: 当线程池中的任务队列满了,且线程池中的线程数大于等于maximumPoolSize时,新任务将交给handler处理,handler将丢弃队列中最早的任务
- ThreadPoolExecutor.CallerRunsPolicy: 当线程池中的任务队列满了,且线程池中的线程数大于等于maximumPoolSize时,新任务将交给handler处理,handler将由当前线程执行任务
- ThreadPoolExecutor.RejectedExecutionHandler: 当线程池中的任务队列满了,且线程池中的线程数大于等于maximumPoolSize时,新任务将交给handler处理,handler将抛出RejectedExecutionException异常
