2015-04-20 4 views
0

У меня есть bean, который получает много информации для показа на странице. Каждый бит этой информации получается путем нажатия db, и в настоящее время это происходит последовательно. Вот некоторые примеры кода из моей bean:Как выполнить несколько запросов параллельно в java?

int transactionCount = dao.getTransactionCount(); 
int personCount = dao.getPersonCount(); 
int carCount = dao.getCarCount(); 
int houseCount = dao.getHouseCount(); 

Я бегу Java 7. Как я могу запустить это параллельно? Я посмотрел на ExecutorService и ForkJoin, но оба, похоже, снова и снова повторяют один и тот же точный код. Это не то, что я здесь делаю. Каков наилучший способ ускорить это?

+3

Первые вещи первых: ваша DAO поточно? –

+0

Вы можете отправить любой Callable, который вы хотите в ExecutorService. –

+0

Мой dao является потокобезопасным. – jhamm

ответ

0

Конечно, вы можете отправлять различные задания одному Исполнителю. Вам просто нужно держать фьючерсы разделены, чтобы получить результат каждой задачи:

static ExecutorService executor = Executors.newFixedThreadPool(NTHREDS); 

//start threads 
Future<Integer> transactionCountFuture = executor.submit(()-> dao.getTransactionCount()); 
Future<Integer> personCountFuture = executor.submit(()-> dao.getPersonCount()); 
Future<Integer> carCountFuture = executor.submit(()-> dao.getCarCount()); 
Future<Integer> houseCountFuture = executor.submit(()-> dao.getHouseCount()); 

//wait until all calls returns a result 
int transactionCount = transactionCountFuture.get(); 
int personCount = personCountFuture.get(); 
int carCountCount = carCountFuture.get(); 
int houseCount = houseCountFuture.get();