CompletableFuture に複数の依存関係がある場合の完了順序を理解したいと思っています。依存関係が追加された順序で完了することを期待していましたが、そうではないようです。
特に、この動作は驚くべきものです。
import java.util.concurrent.CompletableFuture;
public class Main {
public static void main(String[] args) {
{
var x = new CompletableFuture<Void>();
x.thenRun(() -> System.out.println(1));
x.thenRun(() -> System.out.println(2));
x.thenRun(() -> System.out.println(3));
x.complete(null);
}
{
var x = new CompletableFuture<Void>();
var y = x.copy();
y.thenRun(() -> System.out.println(1));
y.thenRun(() -> System.out.println(2));
y.thenRun(() -> System.out.println(3));
x.complete(null);
}
}
}
...結果は次のようになります...
3
2
1
1
2
3