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

标签 java android

我想使用 ThreadPoolExecutor 从 sdcard 并行读取多个文件。选择Threads 数量的最佳方法是什么?根据可用处理器的数量选择大小是否可以?

最佳答案

根据处理器的数量选择线程的数量是一个很好的解决方案,因为它可以根据运行应用程序的设备的硬件进行扩展。一个很好的例子可以在 source code 中找到。 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);

我认为这是最佳实践解决方案。

可以看看AsyncTask的源码here如果您想更好地了解他们如何使用 ThreadPoolExecutor

关于java - 如何在android上选择线程池的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30294794/

相关文章:

android - 使用 Runtime.exec(...) 运行 dpm

java如何区分文件编码ISO-8859-1和UTF-8?

java - 调试 Hibernate/Ehcache 死锁

java获取星期几不准确

android - 无法解析 : com. android.support :support-v4:26. 3.1

c# - Xamarin Android ImageView 缩放

java - 在Android中显示GCM消息

java - 在 For 循环中从 LinkedList 中删除元素;备择方案?

java - 在 java 中替换 system.out.println(class)

Java:如何将 LocalDateTime 值转换为日期并保留时间部分