我有三个查询要运行,所有查询都类似于“select * from table
”,它们花费了很多时间。
我想使用java并发并行运行所有查询,我如何实现这一点。
最佳答案
您可以将数据库调用包装在 Callable 中,如下所示:
public class SqlTask implements Callable<ResultSet> {
private String sql;
public SqlTask(final String sql) {
this.sql = sql;
}
@Override
public ResultSet call() throws Exception {
Connection connection = ...; // get connection
Statement stmt = connection.createStatement();
return stmt.executeQuery(this.sql);
}
}
然后使用 ExecutorService 并行执行它们,例如:
final ExecutorService executor = Executors.newCachedThreadPool();
final Future<ResultSet> futureResult1 = executor.submit (new SqlTask("SELECT * FROM table1"));
final Future<ResultSet> futureResult2 = executor.submit(new SqlTask("SELECT * FROM table2"));
final Future<ResultSet> futureResult3 = executor.submit(new SqlTask("SELECT * FROM table3"));
final ResultSet result1 = futureResult1.get();
final ResultSet result2 = futureResult2.get();
final ResultSet result3 = futureResult3.get();
关于java - 如何在运行选择查询时使用 java 并发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24163900/