在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 ..
答案 0 :(得分:2)
如果我已经达到MAXIMUM_POOL_SIZE再调用一次executeOnExecutor(),所有线程都在运行,并且sPoolWorkQueue已满,那么会发生什么。
你得到A
__D
B
__E
C
__F
。