Android中的线程池的概念来源于Java中的Executor,Executor是一个接口,真真的线程池的实现为ThreadPoolExecutor。ThreadPoolExecutor提供了一系列参数来配置线程池。Android的线程池主要分为4类。
一、线程池的优点:
重用线程池中的线程。
能有效控制线程池的最大并发数,避免大量的线程之间因相互抢占资源而导致阻塞的现象。
能够对线程进行简单的管理,并提供定时执行以指定间隔循环执行等功能。
二、Android主要的四类线程池
1.FixThreadPool
它是一种线程数量固定的线程池,当线程处于空闲状态时,它们并不会被回收,除非线程池被关闭了。
ExecutorService fixedThreadPool = Executors.newFixedThreadPool(5);
2.CachedThreadPool
它是一种线程数量不定的线程池,它只有非核心线程,并且其最大线程数为Integer.MAX_VALUE。
ExecutorService cachedThreadPool = Executors.newCachedThreadPool(5);
3.ScheduledThreadPool
它的核心线程数是固定的,而非核心数是没有限制的,并且当非核心线程闲置时会立即被回收。
ExecutorService scheduledThreadPool = Executors.newScheduledThreadPool(5);
4.SingleThreadExecutor
这类线程内部只有一个核心线程,它确保所有的任务都在同一个线程中按顺序执行。
ExecutorService fixedThreadPool = Executors.newSingleThreadExecutor();
三、核心线程
核心线程会在线程中一直存活,即使它们都处于闲置状态。
四、非核心线程
非核心线程闲置时间超时就会被回收。
五、ThreadPoolExecutor遵守的规则
如果线程池中的线程数未达到核心线程数量,那么会直接启动一个核心线程来执行任务。
如果线程池中的线程数量已达到或者超过核心线程数量,那么任务会被插入到任务队列中排队等待执行。
如果无法将任务插入到队列中,这往往是由于队列已满,这时如果线程数还未达到线程池规定的最大值,那么会立刻启动一个非核心线程来执行任务。
如果线程数量已经达到线程池规定的最大值,那么就拒绝执行此任务。
作者:IT枫
链接:https://juejin.cn/post/6985570973323886623
来源:掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。