У меня есть этот простой код ниже.Все фьючерсы должны начинаться одновременно.future13
должен работать сразу после фьючерсов 1 и 3, но в журналах я вижу, что он ждет, пока фьючерсы 1, 2, 3 и 4 не закончатся.Почему он ждет фьючерсов 2 и 4?
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;
import org.junit.Test;
public class Test1 {
private void loop(Long id, int max) {
try {
for (int i = 0; i < max; i++) {
System.out.println(id);
Thread.sleep(100);
}
} catch (Throwable t) {
System.out.println(t);
}
}
private CompletableFuture<Void> createConfigFuture(Long id) {
return CompletableFuture.supplyAsync(() -> {
loop(id, 100);
return null;
});
}
@Test
public void testMe() {
CompletableFuture<Void> future1 = createConfigFuture(1L);
CompletableFuture<Void> future2 = createConfigFuture(2L);
CompletableFuture<Void> future3 = createConfigFuture(3L);
CompletableFuture<Void> future4 = createConfigFuture(4L);
try {
CompletableFuture<Void> future13 = CompletableFuture.allOf(future1, future3)
.thenApply(v -> {
loop(999L, 5);
return null;
});
CompletableFuture<Void> mainFuture = CompletableFuture.allOf(future13, future2, future4);
mainFuture.get();
} catch (InterruptedException | ExecutionException e) {
System.out.println(e);
}
}
}