AsyncTask源码浅析是串行还是并行

内容点:

  1. AsyncTask由哪些内容组成?
  2. 一个AsyncTask对象只能调一次execute,为什么?
  3. AsyncTask是串行还是并行?

本文是自己开始看源码的记录,希望能给相同刚开始看源码的同志一个参考。

1、AsyncTask的组成成员:

  • ThreadPoolExecutor THREAD_POOL_EXECUTOR
    //线程池,真正执行任务的线程
  • WorkerRunnable<Params, Result> mWorker
    //封装参数作为成员变量,构造方法中新建匿名内部类,重写call方法,调用doInBackground()方法。
  • FutureTask mFuture;
    //用于封装mWorker,并重写done方法
  • Executor SERIAL_EXECUTOR
    //用于再封装FutureTask,并使用ArrayDeque 的offer和pull方法对任务一个个传给线程池去排序执行。
    AsyncTask源码浅析是串行还是并行
    AsyncTask源码浅析是串行还是并行

2、一个AsyncTask对象只能调一次execute,为什么?
AsyncTask源码浅析是串行还是并行AsyncTask源码浅析是串行还是并行
在AsyncTask中由个Status(PENDING,RUNNING,FINISHED)枚举,execute()一执行就讲状态修改未Running,所以在此调用则直接抛出异常。

3、AsyncTask是串行还是并行?
AsyncTask实际是有任务管理器和真正执行的线程池而者组合。
任务管理器串行分发任务
线程池可并行执行任务,但每次只能接受到一个任务,
所以AsyncTask是串行执行任务,一个执行完才执行另外一个。
AsyncTask源码浅析是串行还是并行