0%

线程池

2018年7月8日 下午9:08

慕课网实战·高并发探索(十四):线程池 Executor - CSDN博客

  1. 使用起来那么简单,学习线程池主要是学啥
    1. 用是可以用,关键是根据具体的实际情况调配不同的参数
    2. 就像是不同的病人,即使是相同的病症,我们医生也要根据病人来配不同的药,因人而异
    3. 我只是知道这个方向,但是我还是一个医生学徒,这个需要经验的积累
  2. 线程池的好处
    1. 重用存在的线程,减少对象创建、消亡的开销,性能好
    2. 可有效控制最大并发线程数,提高系统资源利用率,同时可以避免过多资源竞争,避免阻塞。
    3. 提供定时执行、定期执行、单线程、并发数控制等功能。
  3. ThreadPoolExecutor的七个参数
    1. corePoolSize:核心线程数量
    2. maximumPoolSize:线程最大线程数
    3. workQueue:阻塞队列,存储等待执行的任务,很重要,会对线程池运行过程产生重大影响
    4. keepAliveTime:线程没有任务执行时最多保持多久时间终止(当线程中的线程数量大于corePoolSize的时候,如果这时没有新的任务提交核心线程外的线程不会立即销毁,而是等待,直到超过keepAliveTime)
    5. unit:keepAliveTime的时间单位
    6. threadFactory:线程工厂,用来创建线程,有一个默认的工场来创建线程,这样新创建出来的线程有相同的优先级,是非守护线程、设置好了名称)
    7. rejectHandler:当拒绝处理任务时(阻塞队列满)的策略(AbortPolicy默认策略直接抛出异常、CallerRunsPolicy用调用者所在的线程执行任务、DiscardOldestPolicy丢弃队列中最靠前的任务并执行当前任务、DiscardPolicy直接丢弃当前任务)
  4. Executor可以创建四种线程池
    1. 分别对应上边提到的四种线程池初始化方法
    2. Executors.newCachedThreadPool
      1. 创建一个可缓存的线程池,如果线程池的长度超过了处理的需要,可以灵活回收空闲线程。如果没有可回收的就新建线程。
    3. newFixedThreadPool
      1. 定长线程池,可以线程现成的最大并发数,超出在队列等待
    4. newSingleThreadExecutor
      1. 单线程化的线程池,用唯一的一个共用线程执行任务,保证所有任务按指定顺序执行(FIFO、优先级…)
    5. newScheduledThreadPool
      1. 定长线程池,支持定时和周期任务执行