Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在java中并行运行多个查询?_Java - Fatal编程技术网

如何在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
不能同时运行多个语句。为什么不将这三个单独的查询包装到一个存储过程中,只调用一次就可以获取所需的所有数据呢?