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/