gpt4 book ai didi

Java 与主线程并行运行任务而不阻塞它

转载 作者:行者123 更新时间:2023-12-02 10:12:05 26 4
gpt4 key购买 nike

我正在尝试使用 Java 8 的 CompletableFuture 功能,该功能表示它提供了异步运行的能力。但为了执行“future”中的内容,需要调用 future.get() 方法。这样做会阻塞主线程。因为它在执行 future.get()

之后的行之前等待 30 秒 sleep

有办法实现这一点吗?执行非阻塞方式我正在尝试打印

"I'll run in the main thread."

之前

"I'll run in a separate thread than the main thread."

public static void main(String[] args) throws ExecutionException, InterruptedException {


CompletableFuture<Void> future = CompletableFuture.runAsync(new Runnable() {
@Override
public void run() {
// Simulate a long-running Job
try {
TimeUnit.SECONDS.sleep(30);
} catch (InterruptedException e) {
throw new IllegalStateException(e);
}
System.out.println("I'll run in a separate thread than the main thread.");
}
});
future.get();
System.out.println("I'll run in the main thread.");
}

最佳答案

CompletableFuture.runAsync(Runnable) 已开始运行其他线程。调用 future.get() 只是等待该线程完成运行并获取其结果的一种方法,然后再继续在线程中执行调用。

当您启动线程并立即获取它时,中间没有执行任何操作(就像您所做的那样),那么运行线程就没有意义了。

关于Java 与主线程并行运行任务而不阻塞它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54945572/

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