android开发之线程池

释放双眼,带上耳机,听听看~!

使用线程池的好处
1.线程池的重用,可以避免创建和销毁线程的开销

2.能够控制线程的并发数,避免太多的线程争夺CPU资源,而造成阻塞

线程池都是实现Executor接口   

public class ThreadPoolExecutor extends AbstractExecutorService {}
public abstract class AbstractExecutorService implements ExecutorService {}
public interface ExecutorService extends Executor {}
public interface Executor {
void execute(Runnable var1);
}

ThreadPoolExecutor 常用构造方法

/**
* @param corePoolSize 核心线程数
* @param maximumPoolSize 最大线程数,线程数量大于它,大于它的线程要排队
* @param keepAliveTime 超时时长,作用于非核心线程,空闲时间超过它,线程就被回收
* @param unit keepAliveTime的时间单位,是个枚举类型
* @param workQueue 线程的缓冲任务队列
* @parma threadFactory 线程工厂接口 public interface ThreadFactory { Thread newThread(Runnable var1);}为线程池创建线程
*/
public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue<Runnable> workQueue) {
}

不同线程数的情况:

1.当前线程的数量小于corePoolSize      结果:直接启动一个核心线程去执行任务。

2.当线程前的数量大于等于corePoolSize 并且线程的缓冲任务队列workQueue没有满时,新的任务会被添加进workQueue,并等待。

3.workQueue已满并且当前线程的数量小于maximumPoolSize,会开启非核心线程来执行任务。

4.workQueue已满并且当前线程的数量大于maximumPoolSize,调用handler会抛出异常

android中线程类型

1.FixThreadPool

/**
* nThreads 线程数量
* 特点:1.都是核心线程
*       2.不会被回收,会及时的响应任务请求
*       3.没有限制大小,任务数量nThreads,大于它的任务会等待执行
*/
public static ExecutorService newFixedThreadPool(int nThreads) {
return new ThreadPoolExecutor(nThreads, nThreads, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<Runnable>());
}

2.SingleThreadPool

/**
* 特点:1.只有一个核心线程
*       2.所有任务按顺序执行,线程同步
*/
public static ExecutorService newSingleThreadPool (int nThreads){
return new FinalizableDelegatedExecutorService ( new ThreadPoolExecutor (1, 1, 0, TimeUnit. MILLISECONDS, new LinkedBlockingQueue<Runnable>()) );

3.CachedThreadPool

/**
* 特点:
*      1.只有非核心线程,最大数量为nteger.MAX_VALUE
*      2.新任务到来时,有空闲线程,就会复用空闲线程,没有则新建线程
*      3.线程空闲时间为60s,超过会被回收
*      4
*/
public static ExecutorService newCachedThreadPool(int nThreads){
return new ThreadPoolExecutor(0, Integer.MAX_VALUE, 60L, TimeUnit. SECONDS, new SynchronousQueue<Runnable>());
}

4.ScheduledThreadPool

/**
* 特点:1.做延迟和周期性任务
*       2.核心线程数量固定,非核心线程,空闲下来,会被立即回收
*
*/
public ScheduledThreadPoolExecutor(int corePoolSize){
super(corePoolSize, Integer.MAX_VALUE, 0, NANOSECONDS, new DelayedQueue ());}

线程池的使用:

Executors.newFixThreadPool(3).execute(r);

Executors.newSingleThreadPool ().execute(r);

Executors.newCachedThreadPool().execute(r);

Executors. newScheduledThreadPool (3).scheduleAtFixedRate(r, 2000, 3000, TimeUnit.MILLISECONDS)

人已赞赏
Android文章

android开发之内存泄露

2021-2-1 8:22:37

Android文章

Android开发图片二级缓存

2021-2-1 9:15:24

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索