gpt4 book ai didi

java - FutureTasks 和 CachedThreadPool 是如何工作的

转载 作者:行者123 更新时间:2023-11-30 09:56:23 24 4
gpt4 key购买 nike

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

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);
}

我遇到的问题是我让每个 future 的任务打印出它们在进行计算时所花费的时间,所以例如在控制台上我会看到

first_task : 20000ms
second_task : 18000ms
...

但是总时间 (System.out.println(time taken)) 比任何 future 任务所花费的最长时间要大得多,所以根据这个例子,方法 do 将花费大约1 分钟(与 first_task 的 20 秒相比)。

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

最佳答案

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

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

关于java - FutureTasks 和 CachedThreadPool 是如何工作的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2388166/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com