Am Используя этот код, который я создал.
Он генерирует много PDF-файлов из множества HTML-шаблонов, используя wkhtmltopdf .
, поэтому я хочу повысить производительность создания хендридовбез ожидания клиента, это только одна часть реализации.
About getListOfCallables возвращает правильное оптимальное пороговое значение для числа потоков для использования при создании фиксированного пула.
Так что я не могу справиться с тем, что вокруг него лежит множество мертвых потоков, и мой процессор EC2 застрял на 100%.
Я использовал:
- shutdown ()
- shutdownNow () в ожидании
- shutdownNow () в исключительной части
Список fileGenerationHtmlToPdfList = getListOfCallables (пути, имя, параметры);
ExecutorService executorService = Executors.newFixedThreadPool(fileGenerationHtmlToPdfList.size());
List<Future<ArrayList<File>>> futures = null;
try {
futures = executorService.invokeAll(fileGenerationHtmlToPdfList);
try {
for(Future f: futures) {
files.addAll((ArrayList<File>)f.get());
}
} catch (InterruptedException ex) {
Logger.getLogger(FileUtil.class.getName()).log(Level.SEVERE, "Interrupted Exception " , ex);
} catch (ExecutionException ex) {
Logger.getLogger(FileUtil.class.getName()).log(Level.SEVERE, "Interrupted Exception " , ex);
}
} catch (InterruptedException ex) {
Logger.getLogger(FileUtil.class.getName()).log(Level.SEVERE, "Interrupted Exception " , ex);
}
executorService.shutdown();//try shutdown
try {
if (executorService.awaitTermination(5, TimeUnit.SECONDS)) {
Logger.getLogger(FileUtil.class.getName()).log(Level.SEVERE, "Done ShutDowned");
} else {
executorService.shutdownNow();
}
} catch (InterruptedException ex) {
executorService.shutdownNow();
Logger.getLogger(FileUtil.class.getName()).log(Level.SEVERE, "Interrupted Exception " , ex);
}