我正在寻找一个如何同步两个javafx.concurrent.Service的想法 . 每个服务都调用REST endpoints 来加载数据 . 我喜欢同步这两种服务 . 只有当两个服务都被读取时,我才更新我的屏幕元素 . 这两个服务都在使用EventHandler回调 . JavaFx中是否有标准模式来执行此操作?
感谢您的支持 .
此致,曼努埃尔
一个简单的解决方案可能是收听服务的 Worker.State :
Worker.State
firstService.stateProperty().isEqualTo(State.SUCCEEDED) .and(secondService.stateProperty().isEqualTo(State.SUCCEEDED)) .addListener((ov, b, b1) -> { if(b1){ // udpateUI } });
如果Java 8是一个选项,你可以查看它的 CompletableFuture ,并使用例如
CompletableFuture
CompletableFuture<Void> future1 = CompletableFuture.runAsync(() -> service1); CompletableFuture<Void> future2 = CompletableFuture.runAsync(() -> service2); CompletableFuture<Void> finished = CompletableFuture.allOf(future1, future2); finished.thenRun(() -> { Platform.runLater(() -> { // updateUI }); });
1 回答
一个简单的解决方案可能是收听服务的
Worker.State
:如果Java 8是一个选项,你可以查看它的
CompletableFuture
,并使用例如