簡體   English   中英

如何在Android上選擇線程池的大小

[英]How to choose size of thread pool on android

我想與ThreadPoolExecutor並行地從sdcard讀取多個文件。 選擇Threads數的最佳方法是什么? 是否可以根據可用處理器的數量選擇大小?

根據處理器數量選擇Threads數量是一個很好的解決方案,因為它可以根據運行應用程序的設備的硬件進行擴展。 一個很好的例子可以在AsyncTask源代碼中找到:

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的源代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM