import java.io.FileOutputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
public class ExcelExporter {
public static void main(String[] args) {
// 模拟数据
List<List<String>> dataList = new ArrayList<>();
dataList.add(List.of("ID", "Name", "Age"));
dataList.add(List.of("1", "John", "25"));
dataList.add(List.of("2", "Mary", "30"));
dataList.add(List.of("3", "Tom", "28"));
// 设定每个线程处理的数据量和线程数
int batchSize = 2;
int threadCount = 2;
// 创建线程池
ExecutorService executor = Executors.newFixedThreadPool(threadCount);
// 创建导出任务
for (int i = 0; i < dataList.size(); i += batchSize) {
int endIndex = Math.min(i + batchSize, dataList.size());
List<List<String>> subList = dataList.subList(i, endIndex);
Runnable exportTask = new ExportTask(subList);
executor.execute(exportTask);
}
// 关闭线程池
executor.shutdown();
}
static class ExportTask implements Runnable {
private List<List<String>> dataList;
public ExportTask(List<List<String>> dataList) {
this.dataList = dataList;
}
@Override
public void run() {
try (Workbook workbook = new XSSFWorkbook();
FileOutputStream fileOut = new FileOutputStream("Export" + Thread.currentThread().getId() + ".xlsx")) {
Sheet sheet = workbook.createSheet("Sheet1");
int rowNum = 0;
for (List<String> rowData : dataList) {
Row row = sheet.createRow(rowNum++);
int cellNum = 0;
for (String cellData : rowData) {
Cell cell = row.createCell(cellNum++);
cell.setCellValue(cellData);
}
}
workbook.write(fileOut);
System.out.println("Exported by Thread " + Thread.currentThread().getId());
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
java多线程批量导出excel
最新推荐文章于 2024-06-14 15:38:01 发布