概述
基本的使用就不说了,网上也有大量的介绍,主要简单介绍内部结构,流程。
带泛型参数的抽象类
串行执行:默认是串行。
并行执行:直接调用
executeOnExecutor(Executor exec, Params.. params)
executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR,params)
直接使用其内部的线层池。如下为其封装的线层池。最大缓存队列为128个,超出会导致FC。
封装的线程池:
//根据cpu的大小来配置核心的线程
private static final int CPU_COUNT=Runtime.getRuntime().availableProcessors();
//内核线程数量
private static final int CORE_POOL_SIZE=CPU_COUNT+1;
//线程池中允许的最大线程数目
private static final int MAXIMUM_POOL_SIZE=CPU_COUNT*2+1;
//空闲线程的超时时间
private static final int KEEP_ALIVE=1;
private static final ThreadFactory sThreadFactory = new ThreadFactory() {
private final AtomicInteger mCount = new AtomicInteger(1);
public Thread newThread(Runnable r) {
return new Thread(r, "AsyncTask #" + mCount.getAndIncrement());
}
};
private static final BlockingQueue<Runnable> sPoolWorkQueue =new LinkedBlockingQueue<Runnable>(128);
/**
* An {@link Executor} that can be used to execute tasks in parallel.
*/
public static final Executor THREAD_POOL_EXECUTOR=
new ThreadPoolExecutor(CORE_POOL_SIZE, MAXIMUM_POOL_SIZE, KEEP_ALIVE,TimeUnit.SECONDS, sPoolWorkQueue, sThreadFactory);
关键字
看完内部源码,认识很多线程操作的关键字。
AtomicInteger 线程安全的加减操作接口
AtomicBoolean 线程安全的boolean操作接口
Executor 工厂类,专门创建各种线程池(例如子类:ExecutorService )
FutureTask 获取线程状态的接口
Callable,synchronized,volatile,ThreadPoolExecutor,Handler,泛型,枚举等等。
流程图
图片引自github的一篇大神的MD
参考链接:
AsyncTask源码解析
haha,MarkDown写博客好舒服。