Giriş
Sınıf şöyledir. T parametresi döndürülen tiptir. Bu sınıfta çok fazla metod var !
Kalıtım
1. CompletionStage
2. Future
CompletionStage için açıklama şöyle.
Sınıf şöyledir. T parametresi döndürülen tiptir. Bu sınıfta çok fazla metod var !
CompletableFuture<T> implements CompletionStage
<T>, implements Future<T>
Bu sınıf iki arayüzü gerçekleştirir. Temel olarak hem ForkJoin Thread Pool içinde iş çalıştırabilmeyi hem de ExecutorService'e iş olarak verilebilmeyi sağlar.Kalıtım
1. CompletionStage
2. Future
CompletionStage için açıklama şöyle.
Since the CompletableFuture class implements the CompletionStage interface, we first need to understand the contract of that interface. It represents a stage of a certain computation which can be done either synchronously or asynchronously. You can think of it as just a single unit of a pipeline of computations that ultimately generates a final result of interest. This means that several CompletionStages can be chained together so that one stage’s completion triggers the execution of another stage, which in turn triggers another, and so on.Future için açıklama şöyle.
In addition to implementing the CompletionStage interface, CompletableFuture also implements Future, which represents a pending asynchronous event, with the ability to explicitly complete this Future, hence the name CompletableFuture.Yeni Stage Başlatan Metodlar
Açıklaması şöyle
- if a method name has fragment “then“, then the new stage starts after completion of a single previous stage- if a method name has fragment “either“, then the new stage starts after completion of the first of two previous stages- if a method name has fragment “both“, then the new stage starts after completion of both of two previous stages
Stage İçinde Ne Yapıldığını Anlatan Metodlar
Açıklaması şöyle
- if a method name has fragment “apply“, then the new stage transforms an argument by the given Function- if a method name has fragment “accept“, then the new stage consumes an argument by the given Consumer- if a method name has fragment “run“, then the new stage runs an action by the given Runnable
- thenAccept X() metodları bir future nesnesinin sonucunu sadece consume eder. Yani void döner.
- thenCombineX() metodları iki tane future nesnesinin sonuçlarını birleştirmek içindir
- thenApplyX() metodları bir future nesnesinin sonucunu alıp kullanarak başka bir sonuç döner.
Yeni CompletionStageYaratan Metodlar
newIncompleteFuture(), supplyAsync(), runAsnyc()i completedFuture(), failedFuture() kullanılabilir
Bulk Metodlar
allOf(), anyOf() gibi metodlar bulk çalışırlar
Complete İçin Metodlar
complete(), completeAsync()i completeOnTimeout(), completeExceptionally(), cancel() kullanılabilir
Bittiğini Anlamak İçin Metodlar
isDone(), isCompletedExceptionally(), isCancelled() gibi metodlar kullanılır
Sonuç Okumak İçin Metodlar
Bittikten sonra sonucu okumak gerekir.
get(), join(), get(timeout,timeunit), getnow() gibi metodlar kullanılır
constructor
Örnek
Şöyle yaparız.
Girdi olarak ya kendi sonucumu ya da parametre olarak verilen CompletionStage nesnesinin sonucunu alır.
allOf metodu
CompletableFuture.allOf metodu yazısına taşıdım.
CompletableFuture<String> f = new CompletableFuture<>();
Örnek
Şöyle yaparız
public Future<String> calculateAsync() throws InterruptedException {
CompletableFuture<String> completableFuture = new CompletableFuture<>();
Executors.newCachedThreadPool().submit(() -> {
Thread.sleep(500);
completableFuture.complete("Hello");
return null;
});
return completableFuture;
}
acceptEither metodu
allOf metodu
CompletableFuture.allOf metodu yazısına taşıdım.
anyOf metodu
CompletableFuture.anyOf metodu yazısına taşıdım.
applyToEither metodu
ompletableFuture.applyToEither metodu yazısına taşıdım.
applyToEither metodu
ompletableFuture.applyToEither metodu yazısına taşıdım.
cancel metodu
Açıklaması şöyle. Future cancel() edildikten sonra get() metodunu çağırmak CancellationException fırlatılmasına sebep olur
Very close to exceptional completion, we can cancel a computation via the cancel(boolean mayInterruptIfRunning) method from the Future interface. For CompletableFuture, the boolean parameter is not used because the implementation does not employ interrupts to do the cancelation. Instead, cancel() is equivalent to completeExceptionally(new CancellationException()).Bu metodun bir eksikliğinin açıklaması şöyle.
CompletableFuture.cancel()method does not interrupt underlying thread; it merely puts future to an exceptionally completed state. So even if you use any blocking calls inside functions passed to thenApplyAsync/ thenAcceptAsync/ etc., these functions will run until the end and will never be interrupted.complete metodu
CompletableFuture.complete metodu yazısına taşıdım
completedFuture metodu
CompletableFuture.completedFuture metodu yazısına taşıdım
completeExceptionally metodu
Açıklaması şöyle.
explicitly complete the stage with an exception.copy metodu
Örnek ver
exceptionally metodu
CompletableFuture.exceptionally metodu yazısına taşıdım.
handle metodu
CompletableFuture.handle metodu yazısına taşıdım.
handleAsync metodu
Şöyle yaparız
f.handleAsync(biFunc, Executors.newFixedThreadPool(4)); // e.g. called with a fixed
// thread pool of 4
isDone()
returns trues if the CompletableFutre is completed in any mannrer: normally, exceptionally, or by cancellation
isCompletedExceptionally()
returns true is this CompletableFuture is completed exceptionally, including cancellation
isCancelled()
returns true is this CompletableFuture is cancelled before it completed normally
İmzası şöyle.
public T join()
CompletableFuture<List<String>> cf = CompletableFuture
.supplyAsync(this::process)
.exceptionally(this::getFallbackListOfStrings) // catch join's CompletionException
.thenAccept(this::processFurther);
getNow metodu
Future arayüzündeki get() metoduna benzer bir kullanım sağlar. Farklı olarak hemen döner.
orTimeout metodu
CompletableFuture.orTimeout metodu yazısına taşıdım
CompletableFuture.orTimeout metodu yazısına taşıdım
runAfterBoth metodu
Açıklaması şöyle.
Instead of executing a Runnable upon completion of both stages, using BiConsumer allows processing of their resultsrunAsync metodu - Runnable
CompletableFuture.runAsync metodu yazısına taşıdım.
runAsync metodu - Runnable + Executor
CompletableFuture.runAsync metodu yazısına taşıdım.
supplyAsync metodu - Supplier
CompletableFuture.supplyAsync metodu yazısına taşıdım.
supplyAsync metodu - Supplier + Executor
CompletableFuture.supplyAsync metodu yazısına taşıdım.
thenAccept metodu
thenAcceptBoth metodu
CompletableFuture.thenAcceptBoth metodu yazısına taşıdım.
CompletableFuture.thenAcceptBoth metodu yazısına taşıdım.
thenApply metodu - Allows the Return Type To Be Modified and Returned
CompletableFuture.thenApply metodu yazısına taşıdım.
thenApplyAsync metodu
thenApplyAsync metodu - Executor
CompletableFuture.thenApply metodu yazısına taşıdım.
thenCombine metodu - İki Future Bittikten Sonra Sonuçlarını Alıp Birleştirir
CompletableFuture.thenCombine metodu yazısına taşıdım
thenCombineAsync metodu - Executor
Örnek
Şöyle yaparız
CompletableFuture<X> future1 = ...
CompletableFuture<X> future2 = ...
CompletableFuture future3 = future1.thenCombineAsync(future2, futureCallback, executor);
Şöyle yaparız.
CompletionStage<List<String>> cacheFuture = ...;
return cacheFuture.thenCompose((List<String> userList) -> {
...
}).toCompletableFuture(); //convert `CompletionStage` to `CompletableFuture`
whenComplete metoduCompletableFuture.whenComplete metodu yazısına taşıdım
Hiç yorum yok:
Yorum Gönder