如何在java中并行运行多个查询?
我有一个如何在java中并行运行多个查询?,java,Java,我有一个bean,可以在页面上显示很多信息。此信息的每一位都是通过点击db来获得的,目前这是按顺序进行的。下面是我的bean中的一些示例代码: int transactionCount = dao.getTransactionCount(); int personCount = dao.getPersonCount(); int carCount = dao.getCarCount(); int houseCount = dao.getHouseCount(); 我正在运行Java7。我怎么能
bean
,可以在页面上显示很多信息。此信息的每一位都是通过点击db
来获得的,目前这是按顺序进行的。下面是我的bean
中的一些示例代码:
int transactionCount = dao.getTransactionCount();
int personCount = dao.getPersonCount();
int carCount = dao.getCarCount();
int houseCount = dao.getHouseCount();
我正在运行
Java7
。我怎么能并行运行呢?我已经查看了ExecutorService
和ForkJoin
,但它们似乎都必须反复运行相同的代码。这不是我在这里做的。加快速度的最佳方法是什么?当然,您可以向单个执行者提交不同的任务。
您只需将未来分开,即可获得每个任务的结果:
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();
staticexecutorservice executor=Executors.newFixedThreadPool(NTHREDS);
//开始线程
Future transactionCountFuture=executor.submit(()->dao.getTransactionCount());
Future personCountFuture=executor.submit(()->dao.getPersonCount());
Future carCountFuture=executor.submit(()->dao.getCarCount());
Future houseCountFuture=executor.submit(()->dao.getHouseCount());
//等待所有调用返回结果
int transactionCount=transactionCountFuture.get();
int personCount=personCountFuture.get();
int carCountCount=carCountFuture.get();
int houseCount=houseCountFuture.get();
第一件事:您的DAO是线程安全的吗?您可以向ExecutorService提交任何您想要的调用。我的DAO是线程安全的。您的DAO是否为每个请求使用单独的(新的)连接实例?否则它就不是线程安全的,因为单个java.sql.Connection
不能同时运行多个语句。为什么不将这三个单独的查询包装到一个存储过程中,只调用一次就可以获取所需的所有数据呢?