如何在android上选择线程池的大小

Ily*_*iev 5 java android

我想从sdcard中读取多个文件并与ThreadPoolExecutor.选择数量的最佳方式是Threads什么?是否可以根据可用处理器的数量选择尺寸?

Xav*_*ler 5

选择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);
Run Code Online (Sandbox Code Playgroud)

我认为这是一个最佳实践解决方案.

如果你想更好地了解它们如何使用,你可以查看AsyncTask 这里的源代码ThreadPoolExecutor.