线程池

作者: 抱不住太阳的深海line | 来源:发表于2018-05-22 08:36 被阅读0次

    首先说一下为什么用线程池,线程池有什么优点

    1、提高资源利用率 

    线程池可以重复利用已经创建了的线程 

    2、提高响应速度 

    因为当线程池中的线程没有超过线程池的最大上限时,有的线程处于等待分配任务状态,当任务到来时,无需创建线程就能被执行。 

    3、具有可管理性 

    线程池会根据当前系统特点对池内的线程进行优化处理,减少创建和销毁线程带来的系统开销。


    线程池的分类

    在介绍分类之前,先说一下ThreadPoolExecutor 他是线程池的真正实现 他有四个构造 我们直接介绍最多的那个

    ThreadPoolExecutor.png

    1、FixedThreadPool

    FixedThreadPool.png

    通过上面的构造方法方法可以看到 它是一种线程数量固定的线程池,当线程处于空闲状态也不会回收,当所有线程都处于活动状态时,新任务就会处于等待状态,直到有线程空闲出来。

    【举个栗子】就像一堆人排队上公厕,可以无数多的人排队,但是公测位置就那么多,没人上时也不会拆。

    由于线程不会回收,FixThreadPool会更快地响应外界请求,这也很容易理解,就好像有人突然想上厕所,公厕不是现用现建的。

    2、CachedThreadPool

    CachedThreadPool.png

    通过上面的构造方法可以看到 他是线程数量不等的线程池,只有非核心线程,并且数量很大,当有新的任务进来时,如果所有的线程都处于活动,就会创建一个新的线程,否则就用空闲线程来处理,超时时长60秒。

    【举个栗子】CachedThreadPool就像是一堆人去一个很大的咖啡馆喝咖啡,里面服务员也很多,随时去,随时都可以喝到咖啡。但是为了响应国家的“光盘行动”,一个人喝剩下的咖啡会被保留60秒,供新来的客人使用。如果你运气好,没有剩下的咖啡,你会得到一杯新咖啡。但是以前客人剩下的咖啡超过60秒,就变质了,会被服务员回收掉。

    比较适合执行大量的耗时较少的任务。喝咖啡人挺多的,喝的时间也不长。

    3、ScheduledThreadPool

    ScheduledThreadPool.png

    他的核心线程数量是固定的,非核心线程没有限制,当非核心线程闲置时会立即回收,这类线程主要用于执行定时任务和具有定时周期的任务。

    4、SingleThreadExecutor

    SingleThreadExecutor.png

    他只有一个核心线程,他的所有任务都在同一个线程中按顺序执行,并处理了线程同步问题

    【举个栗子】有一个公厕,只有一个位置(这个位置是收费的,因为老大爷年纪大了,管理不了那么多),先来先上。


    嗯 以上就是我对android四个线程池的理解 ,欢迎各位大佬指正。

    相关文章

      网友评论

          本文标题:线程池

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