Java多线程: How to use multi-threading in different ArrayList containing record info?

标签 java multithreading arraylist

我从数据库中检索了 50000 条数据并将它们存储到 arraylist 中。我将 arraylist 分成两半,其中 250000 个存储在 ArrayList1 中(偶数行),其他 25000 个存储在 ArrayList2 中(奇数行)。

现在,我需要使用多线程来处理这些数据,以便一次处理所有 50,000 条记录。主要目的是加快交易速度。

问题是 userList 变得太重并且需要时间。

如何实现 ExecutorService 来加速?

希望尽快收到您的建议。

List<String[]> userList = new ArrayList<String[]>();
void getRecords()
{
    String [] props=null;
    while (rs.next()) {
        props = new String[2];
        props[0] = rs.getString("useremail");
        props[1] = rs.getString("active");
        userList.add(props);
        if (userList.size()>0) sendEmail();   
    }
}

void sendEmail()
{
    String [] user=null;
    for (int k=0; k<userList.size(); k++) 
    { 
        user = userList.get(k);
        userEmail = user[0];         
        //send email code
    }
}

提前致谢。

最佳答案

有一种更简单的方法:生产者-消费者。将所有项目保留在单个列表中,并定义封装数据项的处理任务:

class Task implements Runnable {
     private Object data;

     public Task(Object data) {
         this.data = data;
     }

     public void run() {
        // process data
     }
}

创建一个线程池并将任务一一喂给它:

ExecutorService exec = Executors.newFixedThreadPool(4); // 4 threads
for(Object obj: itemList) {
    exec.submit(new Task(obj));
}

exec.shutdown();
exec.awaitTermination(Long.MAX_VALUE, TimeUnit.DAYS);

现在您有了并行执行和负载平衡(!!!),因为线程在完成之前的任务时按需执行工作。通过将数组分割成连续的部分,您就没有这种保证。

关于Java多线程: How to use multi-threading in different ArrayList containing record info?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12298452/

相关文章:

java - Android Studio 无法检测到 SDK

c++ - 调用 moveToThread() 不会将 QObject 移动到另一个线程。

我可以在特定地址创建一个堆栈的线程吗?

Android 线程 Process.setThreadPriority

java - 创建列表的列表

java - 我执行此算法以计算前 N 个素数有什么问题?

java - ArrayList 到 Byte,反之亦然

java - 打印出用户输入的数组

java - Java中通过编码将char转换为十六进制

java - 在 Spring MVC 上使用 jackson 和相关实体解析 JSON