Finartz
Published in

Finartz

Senkron vs Asenkron Programlama ve CompletableFuture

Senkron programlama, yazılımda her bir işlemin sıra ile yapılmasıdır. Örneğin süpermarketlerdeki kasa kuyruğunda bir önceki müşteri, ürünlerinin ödemesini yapmadan sizin ürünlerinize sıra gelmemektedir. Beklerken yaşanan zaman kaybı Asenkron programlamada ortadan kalkar. Asenkron programlama; işlemlerin birbirini beklemeden , bağımsız olarak gerçekleşmesidir. Süpermarket örneğinden devam edecek olursak, Asenkron programlama; her müşterinin sıra beklemeden istediği kasadan ödeme yapabilmesini sağlamaktadır.

Java programlama dili, Java 8 ile birlikte Asenkron programlamaya da ilgisini arttırmıştır. CompletableFuture arayüzü Java’nın Asenkron programlama için kullanılan bir sınıfıdır. CompletableFuture java.util.concurrent paketi içinde bulunmaktadır. Java 8 öncesi Guava Framework’un de ListenableFuture kullanılmaktadır.

CompletableFuture sınıfı temelde Future<T> ve CompletionStage<T> arayüz sınıflarından türemektedir. CompletionStage<T> arayüzü callback methodların, Future<T> sınıfı ise Asenkron işlemlerin hesaplanmasını kapsamaktadır. CompletableFuture sınıfı toplamda 59 adet metot içermektedir. Tüm metotları detaylı olarak buradan inceleyebilirsiniz. CompletableFuture arayüzü ile geliştirdiğimiz programda, sık kullanılan işlemlerin süresini azaltabiliriz.

Peki ya Senkron çalışan bir metot, Asenkron olarak nasıl kullanılır?

//Senkron çalışan örnek interface UserService { User findUserById(String userId); }class UserServiceImpl implements UserService {

@Override
User findUserById(String userId) {
return findUser(userId); } private User findUser(String id) { … } }//Asenkron çalışan örnek
interface UserService {
CompletableFuture<User> findUserById(String userId); }class UserServiceImpl implements UserService { @Override
CompletableFuture<User> findUserById(String userId) {
return CompletableFuture.supplyAsync(() -> findUser(userId)); } private User findUser(String id) { … }}

CompletableFuture’da dikkat edilmesi gereken en önemli nokta; Asenkron işlemleri Senkron’a dönüştürmemektedir. Örneğin; CompletableFuture arayüzünün sahip olduğu .join() metodu, ilgili işlem tamamlanana kadar diğer tüm işlemleri bekletmektedir. Bu yüzden art arda çağrılan işlemlerde join kullanmamaya dikkat edilmesi gerekmektedir. Bunun yerine .get(long timeout, TimeUnit unit) metodu kullanılabilir. Bu metot sayesinde çok uzun süren işlemlerin, diğer işlemleri bekletmemesi için o işleme bir time out değeri verilir ve işlemlerin birbirini engellemesinin önüne geçilir.

Sonuç olarak Asenkron programlamayı Senkron programlamayla karşılaştırırsak; Asenkron programlama, işlemlerimizi daha hızlı yapmamızı sağlamaktadır.Java programlama dili, Java 8 ile çıkarmış olduğu CompletableFuture arayüzünü Java 9 ile de geliştirmeye devam ederek, ileride de Asenkron programlamaya destek vereceğini göstermiştir.

--

--

--

We are a fintech company creating innovative solutions for cashless society.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store
Arif PEHLİVAN

Arif PEHLİVAN

Software Engineer www.arifpehlivan.com

More from Medium

Different calling forms of REST services with Feign client in Spring Cloud

Why String is Immutable in Java?

How-To Benchmarking in Java

Open-source SPL script make microservices develop more efficient