当AsyncTasks满了会发生什么?

时间:2017-07-27 15:07:02

标签: java android multithreading android-asynctask

在Android 7.0中:

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个处理器,我可以同时拨打executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR)最多137个任务。

如果我再次调用 executeOnExecutor(),当已经达到 MAXIMUM_POOL_SIZE ,所有线程都在运行,并且 sPoolWorkQueue 是满。

虽然这种情况很少见,但我真的好奇,因为我几天前读过某人的旧帖子,说AsyncTask的限制导致他的项目崩溃。他说他必须将任务数量限制在128 ..

1 个答案:

答案 0 :(得分:2)

  

如果我已经达到MAXIMUM_POOL_SIZE再调用一次executeOnExecutor(),所有线程都在运行,并且sPoolWorkQueue已满,那么会发生什么。

你得到A __D B __E C __F