Java 异步回调等待:使用 CompletableFuture 替代 CountDownLatch
可以使用Java的CompletableFuture类来实现等待两个回调结束的需求,而不使用CountDownLatch。\n\n首先,我们可以创建两个CompletableFuture对象来表示两个异步任务的回调。然后,我们可以使用thenCombine方法将这两个CompletableFuture对象组合在一起,并在回调结束后执行特定的操作。\n\n下面是一个示例代码:\n\njava\nimport java.util.concurrent.CompletableFuture;\n\npublic class CallbackExample {\n public static void main(String[] args) {\n CompletableFuture<String> future1 = CompletableFuture.supplyAsync(() -> {\n // 模拟耗时操作\n try {\n Thread.sleep(2000);\n } catch (InterruptedException e) {\n e.printStackTrace();\n } \n return "Result from callback 1";\n });\n\n CompletableFuture<String> future2 = CompletableFuture.supplyAsync(() -> {\n // 模拟耗时操作\n try {\n Thread.sleep(3000);\n } catch (InterruptedException e) {\n e.printStackTrace();\n } \n return "Result from callback 2";\n });\n\n CompletableFuture<Void> combinedFuture = future1.thenCombine(future2, (result1, result2) -> {\n // 两个回调执行完毕后的操作\n System.out.println(result1);\n System.out.println(result2);\n return null;\n });\n\n // 等待两个回调执行完毕\n combinedFuture.join();\n }\n}\n\n\n在上面的示例中,我们创建了两个CompletableFuture对象,分别表示两个异步任务的回调。然后,我们使用thenCombine方法将这两个CompletableFuture对象组合在一起,并定义了回调执行完毕后的操作。\n\n最后,我们使用join方法等待两个回调执行完毕。在这个例子中,等待的过程是阻塞的,直到所有回调执行完毕才会继续执行后续的代码。\n\n需要注意的是,CompletableFuture类还提供了其他方法来处理多个回调的情况,例如thenAcceptBoth、runAfterBoth等。根据具体的需求,可以选择适合的方法来实现等待多个回调结束的功能。
原文地址: https://www.cveoy.top/t/topic/pWuY 著作权归作者所有。请勿转载和采集!