Я использую службу Java Executor для создания singlethread. Код: -64 бит Centos Java JVM не может создать собственный поток
ExecutorService executor = Executors.newSingleThreadExecutor();
try {
executor.submit(new Runnable() {
@Override
public void run() {
Iterator<FileObject> itr = mysortedList.iterator();
while (itr.hasNext()) {
myWebFunction(itr.next();
}
};
}).get(Timeout * mysortedList.size() - 10, TimeUnit.SECONDS);
} catch (Exception ex) {
} finally {
executor.shutdownNow();
}
Деталь: myWebfunction
обрабатывает файлы разного размера и content.Processing
предусматривает извлечение всего содержимого и применение дальнейших действий по содержимому файла. Программа работает в 64bit Centos.
Задача: Когда myWebfunction
получает файл размером более определенного порога, скажем 10 МБ, служба-исполнитель не может создать собственный поток. Я пробовал различные настройки -Xmx
и -Xms
, но все же служба-исполнитель выдает ту же ошибку.
Ловля прерванного исключения, созданного функцией Future.cancel (true), помогло избежать блокировки потоков. Я думаю, что функция executor.shutdownNow не выбрасывает исключение Interrupted. – RocketScience