Я разрабатываю API. Для получения результата этот API должен выполнить 2 запроса БД.
Я попытался следующие стратегии:
Элегантный способ запуска параллельных потоков весной 4
- Используется вызываемым в качестве типа возвращаемого значения в контроллере.
Создал 2 темы в службе (используйте Callable and CoundownLatch), чтобы запустить 2 запроса параллельно и определить время окончания.
public class PetService { public Object getData() { CountDownLatch latch = new CountDownLatch(2); AsyncQueryDBTask<Integer> firstQuery= new AsyncQueryDBTask<>(latch); AsyncQueryDBTask<Integer> secondQuery= new AsyncQueryDBTask<>(latch); latch.await(); } public class AsyncQueryDBTask<T> implements Callable { private CountDownLatch latch; public AsyncQueryDBTask(CountDownLatch latch) { this.latch = latch;} @Override public T call() throws Exception { //Run query latch.countDown(); }
Он работал хорошо, но я чувствую, что я разорвать структуру весной где-то.
Интересно, что это наиболее эффективный способ получить данные весной 4.
-Как знать и 2 потоков, которые работают собственный запрос завершили свою работу?
-Как контролировать поток ресурсов, таких как использование и выпуск потока?
Заранее спасибо.
https://www.mkyong.com/spring/spring-and-java-thread-example/ – StanislavL