executor

63 阅读1分钟

一、如何实现线程池?

  1. 线程池中的线程抽象为一个静态内部类Worker,基于AQS实现,存储在HashSet < Worker >workers成员变量中
  2. 需要执行的任务存放在成员变量workQueue中,从workQueue取出放入workers中进行处理

二、线程池的参数有哪些?

  1. 最大核心线程数
  2. 最大线程数
  3. 最大空闲时间
  4. 任务队列大小

三、线程池中的线程是怎么创建的?

execute添加一个任务时

  1. 小于核心线程数,马上创建线程执行
  2. 大于等于核心线程数,放入队列
  3. 队列满了,小于最大线程数,创建线程执行
  4. 大于等于最大线程数,抛出异常
  5. 超过最大核心线程数的,空闲超过一定时间后回收,缩回到最大核心线程数大小

四、线程池类型有哪些?

  1. SingleThreadExecutor,1、1、0、无界
  2. FixedThreadPool,n、n、0、无界
  3. CachedThreadPool,0、int最大、60、1
  4. ScheduledThreadPool,corePoolSize、int最大、DEFAULT_KEEPALIVE_MILLIS、new DelayedWorkQueue()