まず第一に、私は API java.util.concurrent にまったく慣れていないので、おそらく私がやっていることは完全に間違っていると言わなければなりません。
私は何をしたいですか?
基本的に 2 つの別個の処理 ( myFirstProcess、mySecondProcessと呼ばれる) を実行する Java アプリケーションがありますが、これらの処理は同時に実行する必要があります。
だから、私はそれをやろうとしました:
public void startMyApplication() {
ExecutorService executor = Executors.newFixedThreadPool(2);
FutureTask<Object> futureOne = new FutureTask<Object>(myFirstProcess);
FutureTask<Object> futureTwo = new FutureTask<Object>(mySecondProcess);
executor.execute(futureOne);
executor.execute(futureTwo);
while (!(futureOne.isDone() && futureTwo.isDone())) {
try {
// I wait until both processes are finished.
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
logger.info("Processing finished");
executor.shutdown();
// Do some processing on results
...
}
myFirstProcessとmySecondProcessは を実装するクラスでCallable<Object>
あり、すべての処理は call() メソッドで行われます。
それは非常にうまく機能していますが、それが正しい方法であるかどうかはわかりません。私がやりたいことをする良い方法はありますか?そうでない場合は、コードを強化するためのヒントを教えてください (できるだけシンプルに保ちます)。