Прежде всего, я должен сказать, что я совершенно новичок в API java.util.concurrent, поэтому, возможно, то, что я делаю, совершенно неправильно.
Что я хочу сделать?
У меня есть приложение Java, которое в основном выполняет 2 отдельные обработки (называемые myFirstProcess , mySecondProcess ), но эта обработка должна выполняться одновременно.
Итак, я попытался сделать это:
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 ().
Это работает довольно хорошо, но я не уверен, что это правильный способ сделать это.
Это хороший способ сделать то, что я хочу? Если нет, то можете ли вы дать мне несколько советов по улучшению моего кода (и при этом сохранить его как можно более простым).