java - 如何在运行选择查询时使用 java 并发

标签 java multithreading concurrency executor

我有三个查询要运行,所有查询都类似于“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/

相关文章:

java - MappingJackson2HttpMessageConverter 在 Spring 4 启动期间多次实例化覆盖(无效)自定义 ObjectMapper 设置

c# - 何时以及如何使用 lock()?

c++ - 并发读写的嵌入式数据库

Java Swing 应用程序 : how to get data from the GUI thread to another thread?

multithreading - 缓存一致性 : Threads vs Cores

database - 在 Entity Framework 中使用累积的存储桶值

javascript - Reactjs通过fetch进行POST请求

java - 使用 GWT 作为 google 站点的 portlet?

java - 如何使用 Java 在面板内手动添加带有文本字段的标签

c++ - 如果跨线程共享变量,将变量标记为 volatile 有用吗?