Медленно работает пул потоков ExecutorService

189
14 февраля 2018, 11:11

Использую библиотеку apache poi для транспонирования строк в Excel
Пул потоков в разы медленнее работает, чем без ExecutorService, в чем может быть проблема?

public class MainTranspose {
    public static void main(String[] args) throws IOException, InvalidFormatException, InterruptedException, ExecutionException {
        try( FileInputStream inputStream = new FileInputStream(new File("hello.xlsx"));
             Workbook workbook = new XSSFWorkbook(inputStream);
             FileOutputStream fileOut = new FileOutputStream("hello.xlsx") ) {
                Sheet sheet = workbook.getSheetAt(workbook.getActiveSheetIndex());
                String name = sheet.getSheetName();
                long befor2 = System.currentTimeMillis();
                //multiThredTranspose(sheet, workbook);
                ExecutorService pool = Executors.newFixedThreadPool(4);
                Future<?> future = pool.submit(() -> multiThredTranspose(sheet, workbook));
                future.get();
                pool.shutdown();
                long res2 = System.currentTimeMillis() - befor2;
                workbook.setSheetName(workbook.getActiveSheetIndex(), name);
                workbook.write(fileOut);
                System.out.println(res2);
        }
    }

    protected static void multiThredTranspose(Sheet sheet, Workbook workbook) {
        int numberOfSheet = workbook.getActiveSheetIndex();
        Sheet newSheet = workbook.createSheet();
        for ( Row row : sheet ) {
            row.forEach((Cell cell) -> {
                        CellAddress address = cell.getAddress();
                        int column = address.getColumn();
                        int rowNum = address.getRow();
                        copyToSheet(newSheet, column, rowNum, cell);
                    });
        }
        workbook.removeSheetAt(numberOfSheet);
    }

    protected static void copyToSheet(Sheet sheet, int col, int row, Cell cell) {
        if ( sheet.getRow(col) == null ) {
            sheet.createRow(col);
        }
        Cell cell1 = sheet.getRow(col).createCell(row);
        toSetCell(cell, cell1);
    }

    private static void toSetCell(Cell oldCell, Cell newCell) {
        switch ( oldCell.getCellTypeEnum() ) {
            case NUMERIC:
                if ( DateUtil.isCellDateFormatted(oldCell) ) {
                    newCell.setCellValue(oldCell.getDateCellValue());
                } else {
                    newCell.setCellValue(oldCell.getNumericCellValue());
                }
                break;
            case STRING:
                newCell.setCellValue(oldCell.getRichStringCellValue().getString());
                break;
            case BOOLEAN:
                newCell.setCellValue(oldCell.getBooleanCellValue());
                break;
            case BLANK:
                newCell.setAsActiveCell();
                break;
            case FORMULA:
                newCell.setCellValue(oldCell.getCellFormula());
                break;
            case _NONE:
                throw new UnsupportedOperationException("Unsupported cell type '" + oldCell.getCellTypeEnum() + "'");
        }
    }
}
READ ALSO
Как решить с Ripple в Lolipop

Как решить с Ripple в Lolipop

Я хочу использовать визульаный эффект ripple в Андроид от 16 APIСтандартаня Ripple от гугла не подходит

207
столкновение шаров [требует правки]

столкновение шаров [требует правки]

как осуществить НЕЦЕНТРАЛЬНОЕ столкновение двух шаров на java Нужен именно метод с прописанными формулами так как все остальное есть

230
Перенос елементов в RecyclerView на новую строку

Перенос елементов в RecyclerView на новую строку

Есть андроид приложение со страничкой аккаунта, на которой есть RecyclerView, который в свою очередь содержит скиллы, которыми обладает пользователь

228
Деплой релиза MAVEN в Nexus

Деплой релиза MAVEN в Nexus

Как разобраться с выпуском релиза? Запуск выпуска делаю командой:

218