在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