美文网首页
对java线程池的通俗理解

对java线程池的通俗理解

作者: JarryLeo | 来源:发表于2019-01-11 11:17 被阅读17次

把线程池(ThreadPoolExecutor)理解为一个工厂:
创建这个工厂的规定:

   - int corePoolSize :正式工数量      
   - int maximumPoolSize :最多工人数量(正式工+临时工)    
   - long keepAliveTime :工人多久不干活就辞退     
   - TimeUnit unit :上面工人不干活时间的单位     
   - BlockingQueue<Runnable> workQueue :工厂订单列表      
   - ThreadFactory threadFactory  : 工厂人事部 (招工-创建线程用)    
   - RejectedExecutionHandler handler :工厂灾害处理单位 

下面对Executors 快速创建的几类线程池解读:

1.缓存线程池:

Executors.newCachedThreadPool();
它的创建方法:

  return new ThreadPoolExecutor(0, Integer.MAX_VALUE,
                                      60L, TimeUnit.SECONDS,
                                      new SynchronousQueue<Runnable>());

解读:

这家工厂没有正式员工,所有员工都是零时工,可以无限招工,没有工人数量上限,工人60秒没干活就辞退,可以无限接订单;创建的时候可以自定义人事部,灾害处理单位是ThreadPoolExecutor默认的new AbortPolicy(),订单列表满了,抛出RejectedExecutionException异常,并拒绝新的订单,由于该工厂的订单列表是无限的,所以基本不会用到灾害处理单位;

2.固定线程池

Executors.newFixedThreadPool(int nThreads)
它的创建方法:

return new ThreadPoolExecutor(nThreads, nThreads,
                                      0L, TimeUnit.MILLISECONDS,
                                      new LinkedBlockingQueue<Runnable>());

解读:

这家工厂在创建时候,必须指定正式工数量,并且严格不招收零时工,这里不是不干活立马辞退,而是永远不辞退正式工,可以无限接订单;创建的时候可以自定义人事部,灾害处理单位是ThreadPoolExecutor默认的new AbortPolicy(),订单列表满了,抛出RejectedExecutionException异常,并拒绝新的订单,由于该工厂的订单列表是无限的,所以基本不会用到灾害处理单位;

3.定时任务线程池

Executors.newScheduledThreadPool(int corePoolSize);

它的创建方法:

return new ScheduledThreadPoolExecutor(corePoolSize);

//ScheduledThreadPoolExecutor是继承ThreadPoolExecutor的类
//ScheduledThreadPoolExecutor的构造:
super(corePoolSize, Integer.MAX_VALUE,
              DEFAULT_KEEPALIVE_MILLIS, MILLISECONDS,
              new DelayedWorkQueue());

解读:

这家工厂在创建时候,必须指定正式工数量;但是它可以无限制招收零时工;10毫秒不干活就辞退!该工厂的订单列表也是无限的,但是具有优先级,可以指定时间开工的订单;创建的时候可以自定义人事部;

4.单线程线程池

Executors.newSingleThreadExecutor();

它的创建方法:

  return new FinalizableDelegatedExecutorService
            (new ThreadPoolExecutor(1, 1,
                                    0L, TimeUnit.MILLISECONDS,
                                    new LinkedBlockingQueue<Runnable>()));

通俗解读:

该工厂只有一个工人,不招收零时工,嗯?感觉就是一个自由职业者,不是一个工厂,不存在辞退问题,可以无限制接单,可以自定义人事部,默认的灾害处理单位,用不上;该工厂有个特点,订单没完成的时候,工人死掉了(异常)它会自动再招个工人继续完成工作,并且在没有工作时候,会被垃圾回收装置关闭工厂。

相关文章

  • 对java线程池的通俗理解

    把线程池(ThreadPoolExecutor)理解为一个工厂:创建这个工厂的规定: 下面对Executors 快...

  • 万字长文:带你透彻理解“线程池”

    目标 【理解】线程池的基本概念 【理解】线程池工作原理 【掌握】自定义线程池 【应用】java内置线程池 【应用】...

  • 线程池的原理

    参考 深入Java源码理解线程池原理 线程池是对CPU利用的优化手段 线程池使用池化技术实现,替他的实现还有连接池...

  • 【学习笔记】java线程池

    深入理解Java之线程池

  • 深入理解Java线程池

    深入理解Java线程池 线程池初探 所谓线程池,就是将多个线程放在一个池子里面(所谓池化技术),然后需要线程的时候...

  • J.U.C——线程池专题

    主要讨论以下问题: 认识Java线程池 线程池的种类,区别,和使用场景 线程池的工作流程 线程池几个参数的理解 分...

  • 线程

    Java 并发编程:线程池的使用 Java 并发编程:线程池的使用java 多线程核心技术梳理 (附源码) 本文对...

  • Java线程池快速理解

    Java线程池 [toc] 什么是线程池 线程池就是有N个子线程共同在运行的线程组合。 举个容易理解的例子:有个线...

  • 2019年中Android社招面试总结

    面试遇到的问题: java: 1.说说你对java多线程的理解;2.java的四种线程池以及它们的区别;3.jav...

  • Java多线程之线程池深入讲解

    1 线程池介绍 1.1 线程池概念 Sun在Java5中,对Java线程的类库做了大量的扩展,其中线程池就是Jav...

网友评论

      本文标题:对java线程池的通俗理解

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