猿问

等待异步回调函数在 java 中返回

final Function<Boolean, ? extends Class<Void>> functionCallback = (Boolean t) -> {

   if(t) {

     plugin.setIsInstalled(Boolean.TRUE);             

   }

   return Void.TYPE;

};


foo.install(plugin,functionCallback);


if(plugin.getIsInstalled().getValue())

  return "done";

else 

  return "not done";

我想在回调完成执行后进行检查。在回调完成执行之前,如何防止执行此 if 条件?if(plugin.getIsInstalled().getValue())


慕容3067478
浏览 234回答 3
3回答

jeck猫

您可以使用在回调函数中调用的 :FutureTaskfinal FutureTask<Object> ft = new FutureTask<Object>(() -> {}, new Object());final Function<Boolean, ? extends Class<Void>> functionCallback = (Boolean t) -> {&nbsp; &nbsp; if(t) {&nbsp; &nbsp; &nbsp; &nbsp; plugin.setIsInstalled(Boolean.TRUE);&nbsp; &nbsp; &nbsp; &nbsp; ft.run();&nbsp; &nbsp; }&nbsp; &nbsp; return Void.TYPE;};foo.install(plugin,functionCallback);&nbsp;ft.get();if(plugin.getIsInstalled().getValue())&nbsp; &nbsp; return "done";else&nbsp;&nbsp; &nbsp; return "not done";Future.get等到调用该方法,您还可以使用接受超时的 -method,以便在耗时过长时可以对此做出反应。runget

饮歌长啸

可以使用在函数运行时释放的 或 。CountDownLatchReentrantLock您可以返回 a,您可以按如下方式使用结果foo#installCompletableFutureCompletableFuture<Integer>&nbsp;future&nbsp;=&nbsp;CompletableFuture.supplyAsync(()&nbsp;->&nbsp;1); future.thenAccept((v)&nbsp;->&nbsp;System.out.println("v&nbsp;=&nbsp;"&nbsp;+&nbsp;v));函数本身有一个方法,您可以使用该方法在 post 运行所需的任何内容。andThenapply

Cats萌萌

回调主要用于在特定任务完成后执行任务。因此,它最好将要执行的代码分离到调用该函数的不同函数中。如果你想在回调之后执行一些东西,就要嵌套回调。
随时随地看视频慕课网APP

相关分类

Java
我要回答