Який найпростіший спосіб чекати ExecutorService
завершення всіх завдань ? Моє завдання насамперед обчислювальне, тому я просто хочу запустити велику кількість завдань - по одному на кожне ядро. Зараз моє налаштування виглядає так:
ExecutorService es = Executors.newFixedThreadPool(2);
for (DataTable singleTable : uniquePhrases) {
es.execute(new ComputeDTask(singleTable));
}
try{
es.wait();
}
catch (InterruptedException e){
e.printStackTrace();
}
ComputeDTask
реалізується легко. Це , як видається , правильно виконувати завдання, але код НЕ працює на wait()
з IllegalMonitorStateException
. Це дивно, бо я пограв з деякими прикладами іграшок, і, здається, це спрацювало.
uniquePhrases
містить кілька десятків тисяч елементів. Чи варто використовувати інший метод? Я шукаю щось максимально просте
Executors.newFixedThreadPool(System.getRuntime().availableProcessors());
es
), коли ви хочете його чекати - замок буде автоматично звільнений під час очікування