好久没来简书写文章了,今天接到了阿里的面试,一面,是个技术小伙问了好多技术相关的问题,其中回答不是很好的地方是如何设计自己的线程池。由于现在的三方框架封装的很好也很稳定,就慢慢地淡忘了底层的一些细节。夜深人静之时,再次的重新的梳理下Android中线程池。
线程池的优点:
- 重用线程池中的线程。
- 能有效控制线程池的最大并发数,避免大量的线程之间因相互抢占资源而导致阻塞的现象。
- 能够对线程进行简单的管理,并提供定时执行以指定间隔循环执行等功能。
Android中的线程池的概念来源于Java中的Executor,Executor是一个接口,真真的线程池的实现为ThreadPoolExecutor。ThreadPoolExecutor提供了一系列参数来配置线程池。Android的线程池主要分为4类。
- 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();