Estoy tratando de ejecutar dos void method1 y method2 asíncrono y luego bloquear el código hasta que se completen ambos métodos.
¿Esto logra eso?
CompletableFuture<Void> future1 = CompletableFuture.runAsync(() -> method1()); CompletableFuture<Void> future2 = CompletableFuture.runAsync(() -> method2()); CompletableFuture.allOf(future1, future2).join();Creo que el código CompletableFuture.allOf(future1, future2).join(); debería funcionar bien ¿Podrías probar esto, tuviste algún problema?
O puedes usar algo como:
Arrays.asList(future1,future1).forEach(Future::get);¿Por qué no usas el método dedicado runAsync ?
public static void main(String[] args) { CompletableFuture<Void> future1 = CompletableFuture.runAsync(() -> method1()); CompletableFuture<Void> future2 = CompletableFuture.runAsync(() -> method2()); CompletableFuture<Void> compound = CompletableFuture.allOf(future1, future2); compound.join(); System.out.println("compound done"); } Y sí, su compound se "unirá" en el otro hilo ( main en el ejemplo anterior), como tal, el mensaje compound done se imprimirá solo después de que se ejecuten ambos métodos.