Search code examples
javamultithreadingconcurrencyexecutor

how do I use java concurrency while running select querys


I have three queries to run all are like "select * from table" they are taking so much time. I want to run all query in parallel using java concurrency, how I achieve this.


Solution

  • You can wrap your db calls in a Callable like this:

    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);
        }
    }
    

    and then execute them in parralel using an ExecutorService, for example:

        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();