在Android中7.0:当AsyncTasks已满时会发生什么?
private static final int CORE_POOL_SIZE = Math.max(2, Math.min(CPU_COUNT - 1, 4));
private static final int MAXIMUM_POOL_SIZE = CPU_COUNT * 2 + 1;
private static final int KEEP_ALIVE_SECONDS = 30;
private static final BlockingQueue<Runnable> sPoolWorkQueue = new LinkedBlockingQueue<Runnable>(128);
CORE_POOL_SIZE是初始线程的数目。 MAXIMUM_POOL_SIZE表示队列满时的最大线程数。 sPoolWorkQueue存储等待轮到它运行的任务。
如果我的手机有4个处理器,我可以在最多137个任务中同时拨打executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR)
。
所以,如果我叫会发生什么一个更executeOnExecutor()时已经达到MAXIMUM_POOL_SIZE,所有正在运行的线程,并sPoolWorkQueue已满。
尽管这种情况很少见,但我很好奇,因为前几天我读过某人的旧帖子,称AsyncTask的限制导致了他的项目崩溃。他说,他对任务的数量限制为128 ..
另外['ThreadPoolExecutor'](https://developer.android.com/reference/java/util/concurrent/ThreadPoolExecutor.html)“拒绝任务”部分的文档。 Ps:当队列仍然为空时,您已达到MAXIMUM_POOL_SIZE,因为只要有任务且没有空闲线程,它就会扩展。一旦所有线程都忙碌,您会在队列中看到积压。尽管如此,降低游泳池的尺寸将停止在CORE线程上。 – zapl
@zapl我不知道,谢谢! – Jenix