Пожалуйста, помогите мне. Я не знаю, что я делаю больше.
Проблема в возвращаемом значении future.get (); противоречиво
Иногда результаты (действительные и действительные), (действительные и нулевые), (нулевые и действительные)
ExecutorService executorService = Executors.newFixedThreadPool(
ConfigParameter.HTML_TO_PDF_CONVERTER_MAX_THREADS.getPropertyValue(20));
Set<Callable<String>> workers = new LinkedHashSet<>();
System.out.println("values to process: " + values.size());
for (String serviceId : values) {
workers.add(new HtmlInvoiceNMIPdfWorker(dir, customer, serviceId, stmtno,
html_invoice_id, groupno, htmlconverter_cmd, size));
}
System.out.println("Workers: " + workers.size());
// run threads
List<Future<String>> futures = executorService.invokeAll(workers);
System.out.println("Futures.size(): " + futures.size());
// get worker results
for (Future<String> future : futures) {
System.out.println("Futures: " + future.get());
String file = future.get();
if (!StringUtil.isNullOrEmpty(file)) {
System.out.println("filenames.add(file): " + file);
filenames.add(file);
} else {
// do nothing
}
}
executorService.shutdown();
Один из результатов печати:
value to process: 2
Workers: 2
Futures.size(): 2
Futures: null
Futures: 32000_1367_20181119182612.pdf
filenames.add(file): 32000_1367_20181119182612.pdf
Я новичок в потоках. Я прочитал несколько вопросов о стековом потоке и до сих пор не знаю причину.
Редактировать: Добавлена часть вызова, так как это большой метод.
getInvoice () собирает HTML-раздел счетов из базы данных на основе настроек. Затем HTML будет преобразован в PDF для загрузки.
String html="<html>";
html += "<head>";
html += "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">";
html += "<style>@font-face {font-family: 'ocr-b_10_btregular'; src: url('assets/font/tt0646m-webfont.woff2') format('woff2'), url('assets/font/tt0646m-webfont.woff') format('woff'); font-weight: normal; font-style: normal;}</style>";
html += "</head>";
html += "<body>";
html += getInvoice(custno, stmtno,nmiServiceId, html_invoice_id, wsReplacePath, groupno);
html += "</body>";
return convertToPDF(html,destination,custno,stmtno,html_invoice_id,groupno,null,cmd);