java - 使用 CompletableFuture 或 Future 对象获取 Callable 值

标签 java multithreading concurrency java-threads

Future.get() 方法是一个阻塞方法,我只是希望我的 main 方法不打扰 f.get() 并继续执行。

如何从 Future 或 CompletableFuture 获取可调用的返回值,而不影响主线程执行,并且不使用任何循环来不断使用 isDone() 检查

        FutureTask<String> result = (FutureTask<String>) es.submit(new Helloo());
//      CompletableFuture<String> r =  CompletableFuture.supplyAsync(()a -> new Hello(), es);
        Future<String> r = es.submit(new Hello());
        es.execute(()->{System.out.println("hello");});
                System.out.println("Main");

                System.out.println("Main");
                System.out.println("Main");
                System.out.println("Main");
                System.out.println(r.get());

                System.out.println("Main");
                System.out.println("Main");```

最佳答案

如果您想提供(计算/生成/检索/等)某个值,然后对该值进行异步操作,您可以通过诸如 CompletableFuture.supplyAsync 之类的方法创建一个 CompletableFuture 。这将返回一个 CompletableFuture 的实例。

使用该实例,您可以调用方法thenAccept,该方法将调用给定的Consumer方法,并使用上一步提供的值作为参数。

所以有点像这样:

CompletableFuture.supplyAsync(aMethodThatWillReturnAString, yourExecutor).thenAccept((string theString) -> {
    System.out.println(theString);
});

关于java - 使用 CompletableFuture 或 Future 对象获取 Callable 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60850133/

相关文章:

java - 两种方法之间的锁使一种方法挨饿

node.js - NodeJS - 访问外部进程时如何处理 "listen EADDRINUSE"

go - goroutine 没有输出

java - 如何在android studio中手动安装gradle-5.5.1-all.zip?

java - 从字符串中删除重复字符的方法(Java)

C++ OpenMP for循环全局变量问题

python - asyncio.sleep 如何不阻塞线程?

Java 迭代器遍历 Excel 行

java - 使用递归迭代数组列表

c++ - 我怎么知道boost线程是否完成?