Giriş
İmzası şöyle.
Kullanım
Şöyle yaparız.
CompletableFuture.supplyAsync(...)
.thenApply(...)
.thenApply(...)
.exceptionally(....)
.thenAccept(...);
thenApply metodu
İmzası şöyle.
supplyAsync () metodunu işleten thread'in thenApply() metodunu da işletmesini bekleriz.
Normalde bu kullanım böyle.
Ancak eğer thenApply() çağrısı sırasında complete() bitmişse yani örneğin supplyAsync () hemen sonuçlanmış ise thenApply() metodu örneğin main thread tarafından işletilir. Bu belirsizlik için açıklama şöyle. Normalde bu kullanımın olmasını beklemiyoruz.
Örnek
Future nesnesinin döndürdüğü tipi bir başka tipe çevirir. Şöyle yaparız.
X döndüren bir future nesnesini void döndüren hale getirmek için şöyle yaparız.
İmzası şöyle.
<U> CompletionStage<U> thenApply(Function<? super T,? extends U> fn)
Açıklaması şöyle.CompletableFuture provides operators that allow the return type to be modified and returned.Yani thenApply() girdi olarak aldığı tipten farklı bir sonuç döndürebilir. Örneğin CompletableFuture<Response> nesnesi alıp CompletableFuture<List<Long>> nesnesine çevirebiliriz.
Kullanım
Şöyle yaparız.
CompletableFuture.supplyAsync(...)
.thenApply(...)
.thenApply(...)
.exceptionally(....)
.thenAccept(...);
thenApply metodu
İmzası şöyle.
public <U> CompletableFuture<U> thenApply(Function<? super T, ? extends U> fn)
ThreadsupplyAsync () metodunu işleten thread'in thenApply() metodunu da işletmesini bekleriz.
Normalde bu kullanım böyle.
Ancak eğer thenApply() çağrısı sırasında complete() bitmişse yani örneğin supplyAsync () hemen sonuçlanmış ise thenApply() metodu örneğin main thread tarafından işletilir. Bu belirsizlik için açıklama şöyle. Normalde bu kullanımın olmasını beklemiyoruz.
Bunlarla uğraşmak istemiyorsak direkt thenApplyAsync() metodunu kullanmak daha iyi olabilir. thenApplyAsync() metodu ForkJoinPool veya içine verilen ExecutorService tarafından çalıştıracağını garanti eder.Actions supplied for dependent completions of non-async methods may be performed by the thread that completes the current CompletableFuture, or by any other caller of a completion method.
Örnek
Future nesnesinin döndürdüğü tipi bir başka tipe çevirir. Şöyle yaparız.
CompletableFuture<String> f = CompletableFuture.supplyAsync(() -> "1234");
CompletableFuture<Integer> theNumber = f.thenApply(Integer::parseInt);
System.out.println(theNumber.get());
ÖrnekX döndüren bir future nesnesini void döndüren hale getirmek için şöyle yaparız.
public CompletableFuture<Void> packetEncrypted(ByteBuffer engineToSocketData) {
return realChannel.write(engineToSocketData).<Void> thenApply(c -> null);
}
veya şöyle yaparız.public CompletableFuture<Void> packetEncrypted(ByteBuffer engineToSocketData) {
return realChannel.write(engineToSocketData).thenApply(c -> (Void) null);
Hiç yorum yok:
Yorum Gönder