使用线程池的好处:
1.线程池中的线程可以复用,能够减少因线程的创建和销毁所带来的性能的消耗。
2.能够有效控制线程池的最大并发数,避免线程之间因互相抢占系统资源而导致阻塞的现象。
3.能够对线程进行简单的管理,提供定时执行以及指定间隔循环执行等功能。
Android中的线程池主要分为4类,FixedThreadPool,CachedThreadPool,ScheduledThreadPool和SingleThreadExexutor。这四种线程池可以通过Executors所提供的工厂方法来得到。这四种线程是通过配置ThreadPoolExecutor(Executor接口的实现类)的不同参数来实现的。
ThreadPoolExecutor执行任务时遵循的原则:
1.如果线程池中的线程数量未达到核心线程的数量,会直接启动一个核心线程来执行任务。
2.如果线程池中的线程数量已经达到或超过核心线程的数量,那么任务会被插入到任务队列中排队等待执行。
3.如果任务队列已满并且线程数量未达到线程池规定的最大值,那么会立即启动一个非核心线程来执行任务。
4.如果任务队列已满并且线程数量已经达到线程池规定的最大值,那么会拒绝执行此任务,抛出RejectedExecution。
1.FixedThreadPool
是一种线程数量固定的线程池,当线程处于闲置状态时,不会被回收,除非线程池关闭了。当所有的线程都处于活动状态时,新的任务会处于等待状态,直到有线程空置出来,FixedThreadPool只有核心线程,并且不会被回收,所以FixedThreadPool能够快速响应外界的请求。
2.CachedThreadPool
线程数量不固定,只有核心线程,最大线程数为 Integer.MAX_VALUE,当线程池中的线程都处于活动状态时,线程池会创建新的线程来处理任务,CachedThreadPool有超时机制,超时时间为60秒,超过60秒闲置线程就会被回收,因此当整个线程池都处于闲置状态时,线程池中的所有线程都会因超时被停止,此时CachedThreadPool是不占用任何系统资源的,适合执行大量耗时较少的任务。
3.ScheduledThreadPool
核心线程数量固定,非核心线程数量没有限制,非核心线程闲置时会被立即回收,主要用于执行定时任务和具有固定周期的重复任务。
4.SingleThreadExexutor
只有一个核心线程,所有的任务都在同一个线程中执行,避免了线程同步的问题。
网友评论