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方法对任务一个个传给线程池去排序执行。
    在这里插入图片描述
    在这里插入图片描述

2、一个AsyncTask对象只能调一次execute,为什么?
在这里插入图片描述在这里插入图片描述
在AsyncTask中由个Status(PENDING,RUNNING,FINISHED)枚举,execute()一执行就讲状态修改未Running,所以在此调用则直接抛出异常。

3、AsyncTask是串行还是并行?
AsyncTask实际是有任务管理器和真正执行的线程池而者组合。
任务管理器串行分发任务
线程池可并行执行任务,但每次只能接受到一个任务,
所以AsyncTask是串行执行任务,一个执行完才执行另外一个。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值