Android ThreadPoolExecutor的基本使用

ThreadPoolExecutor是Java中的一个线程池类,Android中也可以使用该类来管理自己的线程池,它为我们管理线程提供了很多方便。

线程池是一种能够帮助我们管理和复用线程的机制,它可以有效地降低线程创建和销毁的开销。使用线程池可以避免不必要的资源浪费,提高程序的性能和吞吐量。

Android中有很多需要使用线程的场景,如网络请求、文件读写、图片处理等等, 使用ThreadPoolExecutor可以帮助我们在这些场景下管理线程池,从而更加高效地完成任务。

ThreadPoolExecutor包含许多参数,可以根据不同的需求进行配置。其中包括核心线程数、最大线程数、线程空闲时间、工作队列等等。我们可以根据自己的需要进行选择和配置。

线程池的种类:

  1. FixedThreadPool:线程数量固定的线程池,任务队列无大小限制。

  2. CachedThreadPool:线程数量不固定的线程池,根据任务数量来动态地创建线程,并且任务队列无大小限制。

  3. ScheduledThreadPool:定时任务线程池。

  4. SingleThreadExecutor:只有一个线程的线程池,任务队列无大小限制。如果该线程异常结束,会再创建一个线程来替代它。

ThreadPoolExecutor的主要构造函数:

public ThreadPoolExecutor(int corePoolSize, // 核心线程数
                          int maximumPoolSize, // 最大线程数
                          long keepAliveTime, // 空闲线程存活时间
                          TimeUnit unit, // 时间单位
                          BlockingQueue<Runnable> workQueue, // 任务阻塞队列
                          ThreadFactory threadFactory, // 线程工厂
                          RejectedExecutionHandler handler // 拒绝策略
                          )

实例代码:

  1. FixedThreadPool实例:

创建有5个线程的线程池,任务队列使用LinkedBlockingQueue。

ThreadPoolExecutor executor = new ThreadPoolExecutor(5, 5, 0L, TimeUnit.MILLISECONDS,
                    new LinkedBlockingQueue<Runnable>());
  1. CachedThreadPool实例:

线程数量不固定,任务队列使用SynchronousQueue,这种队列没有容量,每个插入操作必须等待另一个线程的移除操作,否则不能继续添加元素。

ThreadPoolExecutor executor = new ThreadPoolExecutor(0, Integer.MAX_VALUE, 60L, TimeUnit.SECONDS,
                    new SynchronousQueue<Runnable>());
  1. ScheduledThreadPool实例:

创建一个大小固定、支持定时和周期性的任务执行的线程池,核心线程数为3,最多同时执行3个任务。

ScheduledThreadPoolExecutor executor = new ScheduledThreadPoolExecutor(3);
  1. SingleThreadExecutor实例:

创建只有一个线程的线程池,核心线程数和最大线程数都是1,任务队列使用LinkedBlockingQueue。如果该线程异常结束,会再创建一个线程来替代它。

ThreadPoolExecutor executor = new ThreadPoolExecutor(1, 1, 0L, TimeUnit.MILLISECONDS,
                    new LinkedBlockingQueue<Runnable>());

猜你喜欢

转载自blog.csdn.net/weixin_44008788/article/details/129370145