Java 多线程批量插入数据库 - 每1000条数据一个线程
您可以使用 Java 的多线程来实现每次将列表中的 1000 条数据插入数据库。以下是一个简单的示例代码:
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class InsertDataThread implements Runnable {
private List<Data> dataList;
public InsertDataThread(List<Data> dataList) {
this.dataList = dataList;
}
@Override
public void run() {
// 连接数据库并插入数据的逻辑
// ...
// 假设将数据插入到名为'table_name'的表中
for (Data data : dataList) {
// 将 data 插入到数据库中的逻辑
// ...
System.out.println('Inserting data: ' + data);
}
}
public static void main(String[] args) {
// 创建一个包含 10000 条数据的列表
List<Data> dataList = new ArrayList<>();
for (int i = 0; i < 10000; i++) {
dataList.add(new Data(i));
}
// 创建一个线程池,线程数为 10
ExecutorService executorService = Executors.newFixedThreadPool(10);
// 每次将 1000 条数据拆分为一个子列表,每个子列表交给一个线程来处理
int batchSize = 1000;
for (int i = 0; i < dataList.size(); i += batchSize) {
List<Data> sublist = dataList.subList(i, Math.min(i + batchSize, dataList.size()));
executorService.execute(new InsertDataThread(sublist));
}
// 关闭线程池
executorService.shutdown();
}
}
class Data {
private int id;
public Data(int id) {
this.id = id;
}
@Override
public String toString() {
return 'Data{' +
'id=' + id +
'}';
}
}
在上述示例中,我们首先创建了一个包含 10000 条数据的列表 dataList。然后,我们创建了一个线程池 executorService,线程数为 10。接下来,我们将数据列表每次拆分为 1000 条数据的子列表,并将每个子列表交给一个线程来处理。每个线程会将子列表中的数据插入到数据库中。最后,我们关闭线程池。
请注意,上述示例仅为演示多线程插入数据的基本思路,实际使用时,您需要根据具体的数据库连接和数据插入逻辑进行相应的修改。
原文地址: https://www.cveoy.top/t/topic/qhpQ 著作权归作者所有。请勿转载和采集!