面试 - 多线程 - 线程池

64 阅读1分钟

核心思想

  1. 复用线程,避免创建线程时间,降低线程创建与销毁代价
  2. 池化,方便统一管理与监控

实现原理

实现思想

生产-消费者模型:将任务生产与任务消费完全解耦,达到缓冲目的

实现原理

1. workerCount < corePoolSize启动新线程
2. 进入缓冲队列,等待非核心线程:
2.1. 实现过程
  1. workerCount >= corePoolSize加入缓冲队列,等待执行
  2. 缓冲队列已满且workerCount < maximumPoolSize启动新线程
2.2. 线程池队列BlockingQueue:
  • ArrayBlockingQueue:规定大小阻塞队列,先进先出,指定容量
  • LinkedBlockingQueue:默认大小Integer.MAX_VALUE,注意容量
  • PriorityBlockingQueue:自定义compareTo制定元素排序规则,不保证同优先级元素顺序
  • SynchronousQueue:put操作必须等待take操作,否则不能添加元素,如果有空闲线程则会重复使用,线程空闲60s会自动回收
3. workerCount > maximumPoolSize 执行拒绝策略

各参数

执行过程原理

线程池模版

自定义线程池