Android -- 线程的池使用

在网上看了很多线程池的介绍和使用,有些写的也很好,不禁点个赞,但是有些就写的比较模糊了,像我这样的新手看的有点迷糊。

最近在项目中用到了线程池,自己做下笔记吧。



public ThreadPoolExecutor(

                              int corePoolSize,

                              int maximumPoolSize,

                              long keepAliveTime,

                              TimeUnit unit,

                              BlockingQueueworkQueue,

                              ThreadFactory threadFactory,

                              RejectedExecutionHandler handler)

1)corePoolSize:线程池的核心线程数,一般情况下不管有没有任务都会一直在线程池中一直存活,只有在 ThreadPoolExecutor 中的方法 allowCoreThreadTimeOut(boolean value) 设置为 true 时,闲置的核心线程会存在超时机制,如果在指定时间没有新任务来时,核心线程也会被终止,而这个时间间隔由第3个属性 keepAliveTime 指定。

2)maximumPoolSize:线程池所能容纳的最大线程数,当活动的线程数达到这个值后,后续的新任务将会被阻塞。

3)keepAliveTime:控制线程闲置时的超时时长,超过则终止该线程。一般情况下用于非核心线程,只有在 ThreadPoolExecutor 中的方法 allowCoreThreadTimeOut(boolean value) 设置为 true时,也作用于核心线程。

4)unit:用于指定 keepAliveTime 参数的时间单位,TimeUnit 是个 enum 枚举类型,常用的有:TimeUnit.HOURS(小时)、TimeUnit.MINUTES(分钟)、TimeUnit.SECONDS(秒) 和 TimeUnit.MILLISECONDS(毫秒)等。

5)workQueue:线程池的任务队列,通过线程池的 execute(Runnable command) 方法会将任务 Runnable 存储在队列中。

6)threadFactory:线程工厂,它是一个接口,用来为线程池创建新线程的。

7)handler:当执行被阻塞时使用的处理程序。



创建线程池:

ThreadFactory namedThreadFactory = new ThreadFactoryBuilder() .setNameFormat("demo-pool-%d").build();

ExecutorService singleThreadPool = new ThreadPoolExecutor(1,3,0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue(1024),namedThreadFactory,new ThreadPoolExecutor.AbortPolicy());

使用:

singleThreadPool.execute(new Runnable() {

@Override

public void run() {

耗时操作。

}

你可能感兴趣的:(Android -- 线程的池使用)