private final ExecutorService pool = Executors.newFixedThreadPool(5);
for (ProductInfo prod : product) {
pool.execute(new Runnable() {
@Override
public void run() {
try {
prod.checkout(processList);
} catch (InterruptedException e) {
log.error("PRODUCT INFO EXCEPTION", e);
}
}
});
}
Все звонки в prod.checkout метод вызова различных интерфейсов, не имеющих никакой связи между ними.Как запустить более двух потоков simultaneosly
ProductInfo.java
@Async
public void checkout(List<ProcessLog> list) throws InterruptedException {
process = processUtil.start(getHome(), job);
list.add(process);
preprocess();
execute();
postprocess();
list.remove(process);
processUtil.end(process);
}
В любое время я вижу только две нити работает, что я могу сделать, чтобы сделать 5 потоков работает в любое время?
Вы смешиваете два подхода: @ Async (если вызывается правильно @ Injected object) будет выполняться асинхронно в любом случае, поэтому добавление ExecutorService не может купить вам ничего, кроме очереди lls для проверки из разных потоков. – Jan
@Jan: Первоначально я вызывал чек непосредственно (без исполнителя), чем я видел только 2 потока, работающих одновременно. –
@AbhishekAgarwal Попробуйте удалить аннотацию Async и поместите Thread.sleep (5000l); в пределах кода заказа, чтобы он запускался по крайней мере в течение нескольких секунд. При необходимости поставьте этот оператор System.out.println (Thread.currentThread(). GetId()); знать количество активных аддов –