java - 从android中的并行线程中的大量文本文件加载数据

标签 java android multithreading android-asynctask threadpool

在我的应用程序中,一开始我必须从大约 20 个文本文件中加载数据,而且只有一次。我首先在 AsyncTask.THREAD_POOL_EXECUTOR 上使用 Asynctasks,但是每个异步任务的 KEEP_ALIVE_TIME 是一个问题,破坏了排队很长时间的异步任务。有没有办法改变这个默认的 KEEP_ALIVE_TIME?如果是这样,请告诉我。现在我已经切换到以下代码:-


public class DBLoader {

    public static int completed = 0;
    public static int nthreads;
    Executor executor;

    public DBLoader(int nthreads) {
        executor = java.util.concurrent.Executors.newFixedThreadPool(nthreads);
        this.nthreads = nthreads;
    }

    public void startThread(Thread thread){
        executor.execute(thread);
    }
}

我的每个线程都从原始资源中读取一个文件并将其放入本地数据库。


InputStream is = InputStreamReader(context.getResources().openRawResource(R.raw.filename));

现在,当我读取 8 个文件时,在 MOTO G1 上执行此操作大约需要 50 秒。这是 Not Acceptable 。请提出一个更好的方法来做到这一点。我正在使用 greendao 来实现本地数据库。 提前致谢。

最佳答案

静态变量THREAD_POOL_EXECUTOR 构造如下:

    public static final Executor THREAD_POOL_EXECUTOR
        = new ThreadPoolExecutor(CORE_POOL_SIZE, MAXIMUM_POOL_SIZE, KEEP_ALIVE,
                TimeUnit.SECONDS, sPoolWorkQueue, sThreadFactory);

我不明白为什么你不能构建你自己的 ThreadPoolExecutor 并修改 KEEP_ALIVE 时间,同时复制任何私有(private)参数。

关于java - 从android中的并行线程中的大量文本文件加载数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34174140/

相关文章:

java - 通过 JNI 将 C++ 字符串发送到 Java

android - 为什么使用 armeabi-v7a 代码而不是 armeabi 代码?

android - 在 Play 商店中发布 apk 后,Google map 显示灰色方 block

java - 如果对 int 变量的写入和读取是原子的,为什么需要 AtomicInteger?

java - 在不阻塞主线程的情况下检索 HTTP 响应

Java - StringBuilder 替换()显示错误 : method String. 替换(char,char)不适用

java - 我们可以在 Cassandra 数据库中设置用户定义的字段长度吗

java - 测试 cxf 示例项目 java_first_spring_support 是否有效

android - Gradle 配置不再适用于 Android Studio 3(测试版)

c++ - 处理中断时如何返回主 GUI 线程?