试图在3个线程中平均分配列表并写入excel

时间:2019-03-06 13:43:10

标签: java

我有一个课程列表,如下所示

List<Course> documents = Arrays.asList(
            new Course(1, "Spring MVC Xls View", new Date()),
            new Course(2, "Spring MVC Xlsx View", new Date()),
            new Course(3, "Spring MVC XlsxStreaming View", new Date()),
            new Course(4, "Spring MVC Xls View", new Date()),
            new Course(5, "Spring MVC Xlsx View", new Date()),
            new Course(6, "Spring MVC XlsxStreaming View", new Date())
    );

I am trying to  didvide the List Equally among 3 threads and write to excel 

我看到的输出仅显示2条记录(4和5)

这是我的程序

import java.text.DateFormat;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.springframework.web.servlet.view.document.AbstractXlsxView;

import com.memorynotfound.model.Course;

public class XlsxView extends AbstractXlsxView {

    private static final DateFormat DATE_FORMAT = DateFormat.getDateInstance(DateFormat.SHORT);

    @Override
    protected void buildExcelDocument(Map<String, Object> model,
                                      Workbook workbook,
                                      HttpServletRequest request,
                                      HttpServletResponse response) throws Exception {
         List<Course> collect = (List<Course>) model.get("courses");
        int partitionSize = 112;
        List<List<Course>> partitions = new ArrayList<>();
        for(int i = 0; i < collect.size();i += partitionSize){
            partitions.add(collect.subList(i,i + Math.min(partitionSize, collect.size() - i)));
        }

          ExecutorService exec = Executors.newFixedThreadPool(3);
        try
        {
        response.setHeader("Content-Disposition", "attachment; filename=\"my-xlsx-file.xlsx\"");
        Sheet sheet = workbook.createSheet("Spring MVC AbstractXlsxView");
        Row header = sheet.createRow(0);
        header.createCell(0).setCellValue("ID");
        header.createCell(1).setCellValue("Name");
        header.createCell(2).setCellValue("Date");
        for (List<Course> list : partitions) {
            exec.submit(new Runnable() {
                @Override
                public void run() {
                     int rowCount = 1;
                     for (Course course : list){
                         Row courseRow = sheet.createRow(rowCount++);
                         courseRow.createCell(0).setCellValue(course.getId());
                         courseRow.createCell(1).setCellValue(course.getName());
                         courseRow.createCell(2).setCellValue(DATE_FORMAT.format(course.getDate()));
                     }

                }
            });

        }

        }
        catch(Exception e)
        {
            e.printStackTrace();
        }

        finally {
            if (!exec.isTerminated()) {
                System.err.println("cancel non-finished tasks");
            }
            exec.shutdownNow();
            System.out.println("shutdown finished");
        }

    }
}

0 个答案:

没有答案