В настоящее время у меня есть код, который делает следующее:
private final static ExecutorService pool = Executors.newCachedThreadPool();
public void foo(){
FutureTask<MyObject> first_task = createFutureTask();
FutureTask<MyObject> second_task = createFutureTask();
...
pool.execute(first_task);
pool.execute(second_task);
....
first_task.get();
second_task.get();
...
System.out.println(time taken);
}
Проблема, с которой я сталкиваюсь, состоит в том, что я получаю каждую будущую задачу, чтобы распечатать время, которое они занимают при выполнении вычислений, поэтому, например, на консоли я увижу
first_task : 20000ms
second_task : 18000ms
...
, но общее время (System.out.println(time taken)
) намного больше, чем самое длительное время, которое требуется для любой будущей задачи, поэтому в соответствии с этим примером метод займет около 1 минуты (по сравнению с 20 секундами first_task).
У меня сложилось впечатление, что эти будущие задачи выполняются параллельно, но из-за времени кажется, что они выполняются одна за другой. Я правильно использую этот API?