2017-07-04 2 views
0

Ayant:rejoindre CompletableFuture vs méthode synchrone

String getData(String key){ 
    // Slow operation 
} 

CompletableFuture<String> getDataAsync(String key){ 
    return CompletableFuture.supplyAsync(() -> getData(key)); 
} 

Quelle est la différence entre ce qui suit?

a)

keyStream.map(key -> getData(key)); 

b)

keyStream.map(key -> getDataAsync(key).join()); 

est-il un avantage à utiliser async dans ce cas?

+0

S'il vous plaît expliquer votre question un peu plus. –

+1

Il n'y a pas de différence: 'join()' se bloque jusqu'à ce qu'un résultat soit disponible. – ck1

Répondre

1

IF le flux dans les deux approches a et b sont séquentiellement. il n'y a pas de différence entre eux, et vous devriez éviter de l'utiliser. parce que vous venez de lancer le getData dans le ForkJoinPool.commonPool() & rejoindre la méthode map jusqu'à ce que getData a été achevée.

IF le flux dans les deux approches a et b sont le parallélisme. il n'y a pas de différence entre eux aussi, et vous devriez aussi éviter de l'utiliser. car un flux parallèle utilise déjà le ForkJoinPool.commonPool() pour ses opérations.

0

Utilisation Async ici dans votre exemple ne fera pas la différence que vous appelez se joindre à ce alors joignez-vous bloque appel et Async ne sera plus Async