[Future.get()方法是一种阻塞方法,我只希望我的主要方法不要为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
之类的方法来创建CompletableFuture.supplyAsync。这将返回CompletableFuture
的实例。
对于该实例,您可以调用方法thenAccept
,该方法将调用给定的Consumer
方法,并使用上一步提供的值作为参数。
所以有点像这样:
CompletableFuture.supplyAsync(aMethodThatWillReturnAString, yourExecutor).thenAccept((string theString) -> {
System.out.println(theString);
});
我假设您是指CompletableStage的回调?就像是CompletableFuture r = CompletableFuture.supplyAsync(()a-> new Hello())。thenAccept(s-> s + World());