我正在开发一个 API。此 API 需要执行 2 次 DB 查询才能获得结果。
我尝试了以下策略:
- 在 Controller 中使用 callable 作为返回类型。
在服务中创建 2 个线程(使用 Callable 和 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(); }
它工作得很好,但我觉得我在某个地方打破了 Spring 的结构。
我想知道在 Spring 4 中获取数据的最有效方法是什么
。-如何知道运行自己的查询的两个线程都完成了工作?
-如何控制线程资源的使用和释放?
提前致谢。