我目前有执行以下操作的代码:
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秒相比)。
我觉得这些未来的任务是并行运行的,但从时间上看,它们似乎是一个接一个地运行。我是否正确使用此API?