5
我想從SD卡讀取多個文件並行與ThreadPoolExecutor
。選擇Threads
的最佳方式是什麼?可以根據可用處理器的數量選擇大小嗎?如何選擇線程池的大小android
我想從SD卡讀取多個文件並行與ThreadPoolExecutor
。選擇Threads
的最佳方式是什麼?可以根據可用處理器的數量選擇大小嗎?如何選擇線程池的大小android
根據處理器數量選擇Threads
的數量是一個很好的解決方案,因爲它根據運行應用程序的設備的硬件進行擴展。這方面的一個很好的例子可以在AsyncTask
的source code發現:
private static final int CPU_COUNT = Runtime.getRuntime().availableProcessors();
private static final int CORE_POOL_SIZE = CPU_COUNT + 1;
private static final int MAXIMUM_POOL_SIZE = CPU_COUNT * 2 + 1;
private static final int KEEP_ALIVE = 1;
private static final ThreadFactory sThreadFactory = new ThreadFactory() {
private final AtomicInteger mCount = new AtomicInteger(1);
public Thread newThread(Runnable r) {
return new Thread(r, "AsyncTask #" + mCount.getAndIncrement());
}
};
private static final BlockingQueue<Runnable> sPoolWorkQueue =
new LinkedBlockingQueue<Runnable>(128);
public static final Executor THREAD_POOL_EXECUTOR
= new ThreadPoolExecutor(CORE_POOL_SIZE, MAXIMUM_POOL_SIZE, KEEP_ALIVE,
TimeUnit.SECONDS, sPoolWorkQueue, sThreadFactory);
我會認爲這是一個最佳實踐的解決方案。
如果您想更好地瞭解他們如何使用ThreadPoolExecutor
,可以查看AsyncTask
here的源代碼。