Java FutureTasks和CachedThreadPool是如何工作的

Java FutureTasks和CachedThreadPool是如何工作的,java,concurrency,futuretask,executors,Java,Concurrency,Futuretask,Executors,我目前拥有执行以下操作的代码: private final static ExecutorService pool = Executors.newCachedThreadPool(); public void foo(){ FutureTask<MyObject> first_task = createFutureTask(); FutureTask<MyObject> second_task = createFutureTask(); ...

我目前拥有执行以下操作的代码:

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);
}
但是总时间(
System.out.println(time take)
)比任何未来任务所花费的最长时间要大得多,因此根据本例,该方法大约需要1分钟(与第一个任务的20秒相比)


我的印象是,这些未来的任务是并行运行的,但从时间上看,它们似乎是一个接一个地运行的。我是否正确地使用了此API?

您正确地使用了此API,但请记住,每个任务都在单独的线程中运行,而不是在单独的进程中运行(因此不一定是并行的)


每个线程必须在单独的CPU内核上运行,才能同时实际执行。这是否可行取决于您的机器、当前负载以及JVM和操作系统如何跨内核调度线程。

如果您有多个内核
first_task : 20000ms
second_task : 18000ms
...