我爱编程

Android中的线程池

2018-05-26  本文已影响47人  三台东

一、使用线程池的优点。
1、重用线程池中线程,避免因为线程的创建和销毁带来的性能开销。
2、能有效控制线程池的最大并发数,避免大量的线程之间因为互相抢占资源而导致的阻塞现象。
3、对线程进行简单的管理,提供定时执行以及指定间隔循环执行。

                                 ThreadPoolExecutor

以下是 ThreadPoolExecutorded的构造方法
ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue<Runnable> workQueue, ThreadFactory threadFactory);
corePoolSize:线程池的核心线程数,一般配置为CPU核心数+1;
maximumPoolSize:线程池所能容纳的最大线程数,一般配置为CPU核心数*2+1;
keepAliveTime:非核心线程闲置时的超长时间,超过这个时长,非核心线程将会被回收,一般配置为1s;
unit:指定keepAliveTime参数的时间单位;
workQueue:线程池中的任务队列,用于保存执行execute方法提交的Runnable对象,一般配置为128;
threadFactory:线程工厂,为线程池提供创建新线程的功能;

                                      线程池的分类

1、FixedThreadPool:一种线程数量固定的线程池,只有核心线程并且核心线程不会被回收,没有超时机制,任务队列也没有大小限制。
优点:能够更快地响应外界的请求。
使用方式:
ExecutorService fixedThreadPool=Executors.newFixedThreadPool(4);
fixedThreadPool.execute(new Runnable());

2、CachedThreadPool:一种线程数量不固定的线程池,最大线程数可以任意大,美滋滋,只有非核心线程,有超时机制,超时时长为60s;
优点:适用于执行大量耗时较少的任务。
使用方式:
ExecutorService cacheThreadPool = Executors.newCachedThreadPool();
cacheThreadPool.execute(new Runnable());

3、ScheduledTheadPool:核心线程数固定,非核心线程数没限制,非核心线程闲置立即被回收。
优点:主要用于执行定时任务和具有固定周期的任务。
使用方式:
ScheduledExecutorService scheduledTheadPool = Executors.newScheduledThreadPool(4);
scheduledTheadPool.scheduleAtFixedRate(new Runnable(), 2, 5, TimeUnit.SECONDS);.//延迟2s后,每5s执行一次

4、singleTheadExecutor:只有一个核心线程,确保所有的任务都在同一个线程中顺序执行。
优点:不需要处理线程同步的问题。
使用方式:
ExecutorService singleThreadPool=Executors.newSingleThreadExecutor();
singleThreadPool.execute(new Runnable());

上一篇下一篇

猜你喜欢

热点阅读