线程池

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

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四个线程池的理解 ,欢迎各位大佬指正。

你可能感兴趣的:(线程池)