线程池

38 阅读1分钟

线程池的作用是什么?

  1. 在java中,创建线程跟销毁线程是会消耗系统资源的,使用线程池可以复用线程,降低了资源消耗
  2. 复用线程池中的线程,在使用的时候由于避免了创建线程,可以达到提高响应速度
  3. 方便管理线程,线程池对线程统一管理,提供了阻塞队列,线程核心数等

线程池参数

ThreadPoolExecutor(int corePoolSize,
                          int maximumPoolSize,
                          long keepAliveTime,
                          TimeUnit unit,
                          BlockingQueue<Runnable> workQueue,
                          ThreadFactory threadFactory,
                          RejectedExecutionHandler handler) {
}

corePoolSize:线程核心数,当向线程池提交任务的时候,如果当前线程池的线程数量小于corePoolSize,则会创建一个新的线程执行任务。如果大于核心数,则会将任务添加到阻塞队列中

maximumPoolSize:线程最大核心数,如果阻塞队列满了,如果当前线程数又少于maximumPoolSize,则会创建新的线程执行任务。如果线程数大于maximumPoolSize,则会执行拒绝策略。

keepAliveTime:空闲线程的存活时间

unit:存活时间单位

workQueue:阻塞队列

LinkedBlockingQueue(基于链表实现的阻塞队列)

ArrayBlockingQueue(基于数组实现的阻塞队列)

SynchronousQueue(只有一个元素的阻塞队列)

PriorityBlockingQueue(实现了优先级的阻塞队列)

DelayQueue(实现了延迟功能的阻塞队列)

threadFactory:线程创建工厂,通常用于设置线程名称

handler:拒绝策略

AbortPolicy(直接终止,抛出异常)

DiscardPolicy(默默丢弃,不抛出异常)

DiscardOldestPolicy(丢弃队列中最旧的任务,执行当前任务)

CallerRunsPolicy(返回给调用者执行)

image.png