AsyncTask里面封装了线程池和Handler,所以很是方便我们使用它来处理ui线程和工作线程之间的异步任务的逻辑工作。
AsyncTask里面的的线程池的实现是用ThreadPoolExecutor来实现的。然而ThreadPoolExecutor的的执行逻辑在cpu多核情况下,执行顺序是不确定的,也就是并行的。
AsyncTask里面有两个线程池的静态常量 这就保证了整个逻辑内只有一个线程池。
- THREAD_POOL_EXECUTOR 多核下,并行,单核下串行。
- SERIAL_EXECUTOR,单核和多核下都是串行。
下面是THREAD_POOL_EXECUTOR的实现和定义。
/**
* An {@link Executor} 并行执行的线程池.
*/
public static final Executor THREAD_POOL_EXECUTOR;
static {
ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(
CORE_POOL_SIZE, MAXIMUM_POOL_SIZE, KEEP_ALIVE_SECONDS, TimeUnit.SECONDS,
sPoolWorkQueue, sThreadFactory, new ThreadPoolExecutor.DiscardOldestPolicy());
threadPoolExecutor.allowCoreThreadTimeOut(true);