私はJavaプログラミングに不慣れです。2つのdbクエリを並行して実行する必要があるユースケースがあります。私のクラスの構造は次のようなものです。
class A {
public Object func_1() {
//executes db query1
}
public Object func_2() {
//executes db query1
}
}
これで、同じクラスに別の関数func_3を追加しました。この関数は、これら2つの関数を呼び出しますが、それらが並列に実行されることも確認します。このために、私はcallablesとfuturesを利用しています。このように使用するのは正しい方法ですか?この変数を一時変数に格納し、これを使用してfunc_3からfunc_1とfunc_2を呼び出します(これが正しいアプローチかどうかはわかりません)。または、このようなケースを処理する他の方法はありますか?
class A {
public Object func_1() {
//executes db query1
}
public Object func_2() {
//executes db query1
}
public void func_3() {
final A that = this;
Callable call1 = new Callable() {
@Override
public Object call() {
return that.func_1();
}
}
Callable call2 = new Callable() {
@Override
public Object call() {
return that.func_2();
}
}
ArrayList<Callable<Object>> list = new ArrayList<Callable<Object>>();
list.add(call1);
list.add(call2);
ExecutorService executor = Executors.newFixedThreadPool(2);
ArrayList<Future<Object>> futureList = new ArrayList<Future<Object>>();
futureList = (ArrayList<Future<Object>>) executor.invokeAll(list);
//process result accordingly
}
}