咸鱼

咸鱼是以盐腌渍后,晒干的鱼

0%

Android 线程池

ExecutorService 是Java提供的用于管理线程池的类。

1、FixedThreadPool

FixedThreadPool ,固定线程数的线程池,核心线程数和最大线程数是一样的;

1
2
// 创建一个可重用固定个数的线程池
ExecutorService executorService = Executors.newFixedThreadPool(3);

2、CachedThreadPool

CachedThreadPool,缓存线程,池线程数可以持续增加。

1
2
// 创建一个可缓存线程池
ExecutorService executorService = Executors.newCachedThreadPool();

3、ScheduledThreadPool

ScheduledThreadPool,周期性执行任务的线程池,定时或周期性的执行任务。

1
2
3
4
5
6
7
8
9
10
//核心线程数是3
ScheduledExecutorService scheduledExecutorService = Executors.newScheduledThreadPool(3);

//周期执行一次
scheduledExecutorService.scheduleAtFixedRate(new Runnable() {
public void run() {
Log.d(TAG,Thread.currentThread().getName()+ "正在执行");
}
}, 1, 500, TimeUnit.MILLISECONDS);

4、SingleThreadExecutor

SingleThreadExecutor,单线程池,核心线程数是1,任务会按顺序执行。

1
ExecutorService singleThreadExecutor = Executors.newSingleThreadExecutor();

5、SingleThreadScheduledExecutor

SingleThreadScheduledExecutor,周期性执行任务的单线程池,核心线程数是1,只有一个任务在同一个时间执行。

1
ScheduledExecutorService service = Executors.newSingleThreadScheduledExecutor();

总结,上面常用的线程池最终调用的都是 ThreadPoolExecutor :

1
2
3
4
5
6
7
8
9
10
public ThreadPoolExecutor(int corePoolSize,    //核心线程数
int maximumPoolSize, //最大线程数
long keepAliveTime, //空闲线程存活时间
TimeUnit unit, //存活时间单位
BlockingQueue<Runnable> workQueue //用于保存等待执行任务的阻塞队列
) {
this(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue,
Executors.defaultThreadFactory(), defaultHandler);
}