[java] view plain copy
- private boolean addWorker(Runnable firstTask, boolean core) {
- …
- int wc = workerCountOf(c);
- if (wc >= CAPACITY ||
- wc >= (core ? corePoolSize : maximumPoolSize))
- return false;
- …
- }
可以看到当任务数目大于容量则返回false,最终在reject()中抛出异常。
上面就是使用2.2模拟器测试的结果; 下面将系统改为4.1.1,也就是我的测试机小米2s 把线程数改为139甚至1000,你可以看到任务一个接一个的在那缓慢的执行,不会抛什么异常,不过线程倒是1个1个的在那执行;
好了,如果现在大家去面试,被问到AsyncTask的缺陷,可以分为两个部分说,在3.0以前,最大支持128个线程的并发,10个任务的等待。在3.0以后,无论有多少任务,都会在其内部单线程执行;
至此,AsyncTask源码分析完毕,相信大家对AsyncTask有了更深的理解~~~
|