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(plugin.getIsInstalled().getValue())
。在回调完成执行之前,如何防止执行此条件?
您可以使用在回调函数中调用的FutureTask
:
final FutureTask<Object> ft = new FutureTask<Object>(() -> {}, new Object());
final Function<Boolean, ? extends Class<Void>> functionCallback = (Boolean t) -> {
if(t) {
plugin.setIsInstalled(Boolean.TRUE);
ft.run();
}
return Void.TYPE;
};
foo.install(plugin,functionCallback);
ft.get();
if(plugin.getIsInstalled().getValue())
return "done";
else
return "not done";
Future.get
一直等到run
方法被调用,你也可以使用接受超时的get
方法,这样你可以对它做出反应,如果它需要太长时间。
回调主要用于在特定任务完成后执行任务。因此,它更好地将您要执行的代码分离到该函数的不同函数调用中。
如果你想在回调后执行嵌套回调。
CountDownLatch
或ReentrantLock
。foo#install
可以返回CompletableFuture
,您可以按如下方式使用结果CompletableFuture<Integer> future = CompletableFuture.supplyAsync(() -> 1);
future.thenAccept((v) -> System.out.println("v = " + v));
andThen
方法,你可以用来运行apply
后需要的任何东西。