1、请在主线程事先实例化sheet

例如:

String fileName = certType + "列表信息.xlsx";
            response.setContentType("application/octet-stream");
            response.setHeader("Content-disposition", "attachment; filename=" + new String(fileName.getBytes("utf-8"), "ISO8859-1"));
            // 去读模板表格
            XSSFWorkbook xwb = new XSSFWorkbook();

            // 先主线程创建四个sheet(如果是异步去写多个sheet,那么必须事先定义好sheet,这样可以保证sheet的顺序不会乱,否则异步创建sheet的时候需要加锁,不然会报错。)
            XSSFSheet sheetAt0 = xwb.createSheet(certType);
            XSSFSheet sheetAt1 = xwb.createSheet(certType+"-ITR");
            XSSFSheet sheetAt2 = xwb.createSheet(certType + "-ITP");
            XSSFSheet sheetAt3 = xwb.createSheet(certType + "-PL");;

2、然后再开启异步去写入数据:

CompletableFuture<Void> future0 = CompletableFuture.runAsync(() -> {
                long time1 = System.currentTimeMillis();
                fillAccListExcelData(sheetAt0,xwb, accList, certStatusMap, certType);
                log.info("===============导出sheet1的时间:{}", (System.currentTimeMillis() - time1) / 1000);
            });
            CompletableFuture<Void> future1 = CompletableFuture.runAsync(() -> {
                long time2 = System.currentTimeMillis();
                fillAccOfItrListExcelData(sheetAt1,xwb, accOfItrList, certType);
                log.info("===============导出sheet2的时间:{}", (System.currentTimeMillis() - time2) / 1000);
            });
            CompletableFuture<Void> future2 = CompletableFuture.runAsync(() -> {
                long time3 = System.currentTimeMillis();
                fillAccOfItpListExcelData(sheetAt2,xwb, accOfItpList, certType);
                log.info("===============导出sheet3的时间:{}", (System.currentTimeMillis() - time3) / 1000);
            });
            CompletableFuture<Void> future3 = CompletableFuture.runAsync(() -> {
                long time4 = System.currentTimeMillis();
                fillAccOfPlListExcelData(sheetAt3,xwb, accOfPlList, certStatusMap, certType);
                log.info("===============导出sheet4的时间:{}", (System.currentTimeMillis() - time4) / 1000);
            });

            CompletableFuture<Void> allFuture = CompletableFuture.allOf(future0, future1, future2,future3);
            allFuture.join();

            // 输出文件
            xwb.write(out);