2

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

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)

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

4

1 回答 1

2

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

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

于 2010-03-05T16:22:07.717 回答