线程池

作者: Mwp的救赎 | 来源:发表于2018-07-15 16:59 被阅读0次

    线程池ThreadPoolExecutor

    几个重要角色
    • Thread 线程;
    • ThreadFactory 线程工厂,创建Thread;
    • Worker,Thread真正运行的Runnable;
    • BlockingQueue,阻塞队列,当核心线程数无空闲时,用户任务入队等待;
    • RejectedExecutionHandler 当等待队列已满且线程池无空闲时,由RejectedExecutionHandler来处理拒绝流程。

      以上角色关系示例图如下: threads_pool.png
      用户任务(Runnable)被线程池执行(execute)的流程: worker.png

    工具类Executors

    • newSingleThreadExecutor
      corePoolSize=maximumPoolSize=1的线程池
    • newFixedThreadPool
      corePoolSize=maximumPoolSize=n(n>=1)的线程池
    注:newSingleThreadExecutor()≠newFixedThreadPool(1),因为通过newFixedThreadPool(1)创建的线程池可以重新设置并发线程数,而newSingleThreadExecutor()创建出来的线程池无法改变并发线程数,只能是单线程。
    • newCachedThreadPool
      核心线程数0,最大线程数Integer.MAX_VALUE,线程保活时间60秒的线程池。官方注释其适用于大量short-lived任务。
      下图说明其工作机制(假设用户任务耗时30秒):
      1.用户于00:00、00:15提交两个30秒的任务,两个Worker并发执行:


      CachedThreadPool1.png
    1. 00:30之后,Worker1空闲,用户于00:40 提交任务Task3,交由Worker1执行


      CachedThreadPool2.png
    2. 00:45-01:45没有新任务进入,Worker2等待超时,线程终止:


      CachedThreadPool3.png
    3. 01:50、02:00用户依次提交两个任务Task4、Task5,Worker1仍存活,执行Task4,由于Worker2终止,新建Worker3执行Task5:


      CachedThreadPool4.png

    相关文章

      网友评论

          本文标题:线程池

          本文链接:https://www.haomeiwen.com/subject/aeuppftx.html