我有一个课程列表,如下所示
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");
}
}
}