gpt4 book ai didi

java future 执行

转载 作者:行者123 更新时间:2023-12-01 17:07:09 27 4
gpt4 key购买 nike

我正在阅读有关 Java 中的 Future 和 javascript 中的 Promises 的内容。下面是我作为示例编写的代码。我的问题是分配给 future 的任务什么时候开始执行?

  1. 当如下行创建 future 时:
    contentsFuture = startDownloading(new URL("http://www.example.com"));

  2. 或者当我们调用get方法时
    最终字符串内容=contentsFuture.get();

看起来执行是在 get 调用期间开始的,因为它是一个阻塞调用,但是为什么它强制我将 startDownloading 调用放在 try catch block 中?

public class Futures1 {

private static final ExecutorService pool = Executors
.newFixedThreadPool(10);

public static void main(String[] args) {

Future<String> contentsFuture = null;
try {
contentsFuture = startDownloading(new URL("http://www.example.com"));
} catch (MalformedURLException e) {
e.printStackTrace();
}
// other computation
try {
final String contents = contentsFuture.get();
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
}

}

public static Future<String> startDownloading(final URL url) {
return pool.submit(new Callable<String>() {
@Override
public String call() throws Exception {
try (InputStream input = url.openStream()) {
return IOUtils.toString(input, StandardCharsets.UTF_8);
}
}
});
}
}

最佳答案

ExecutorService 在提交底层任务后选择何时启动该任务。因此,它通常会在调用 ExecutorService.submit 和调用 Future.get 之间的某个时间点启动。

关于java future 执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25082469/

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