Wie verwende ich CompletableFuture.thenComposeAsync ()?

Gegeben

public class Test
{
    public static void main(String[] args)
    {
        int nThreads = 1;
        Executor e = Executors.newFixedThreadPool(nThreads);

        CompletableFuture.runAsync(() ->
        {
            System.out.println("Task 1. Thread: " + Thread.currentThread().getId());
        }, e).thenComposeAsync((Void unused) ->
        {
            return CompletableFuture.runAsync(() ->
            {
                System.out.println("Task 2. Thread: " + Thread.currentThread().getId());
            }, e);
        }, e).join();
        System.out.println("finished");
    }
}

Ich erwarte, dass ein einzelner Executor-Thread Task 1 und anschließend Task 2 ausführt. Stattdessen bleibt der Code hängen, wennnThreads ist kleiner als 2.

Bitte erklären Sie, warum der Code hängt. Ich kann sehen, dass es in @ gesperrt iCompletableFuture: 616 Warten auf einigeFuture zu vervollständigen, aber es ist nicht klar, warum.Wenn ich die Verwendung von 2 Threads zulasse, wofür wird jeder Thread verwendet?

Kurz gesagt, bitte helfen Sie mir zu verstehen, wiethenComposeAsync() funktioniert tatsächlich. Der Javadoc sieht so aus, als wäre er für Roboter anstelle von Menschen geschrieben worden:)

Antworten auf die Frage(2)

Ihre Antwort auf die Frage