Java - Peningkatan API CompletableFuture

Halo sana, para pengembang Java masa depan! Saya sangat senang untuk memulai perjalanan menarik ini bersama Anda saat kita telusuri dunia yang menakjubkan dari peningkatan API CompletableFuture di Java. Jangan khawatir jika Anda baru belajar pemrograman; kita akan mulai dari dasar dan tingkatkan keahlian kita. Pada akhir panduan ini, Anda akan terpesona melihat betapa banyak yang Anda pelajari!

Java - CompletableFuture API Improvements

Apa Itu CompletableFuture?

Sebelum kita mendalamkan peningkatan, mari kita mengerti apa itu CompletableFuture. Bayangkan Anda sedang memasak makanan yang kompleks. Anda tentu tidak ingin menunggu pasta mendidih sebelum Anda mulai memotong sayur-sayuran, kan? CompletableFuture seperti memiliki beberapa chef di dapur Anda, masing-masing bekerja pada tugas yang berbeda secara bersamaan. Itu cara Java untuk mengelola pemrograman asinkron, memungkinkan kode Anda melakukan beberapa hal secara bersamaan tanpa menjadi bingung.

Contoh CompletableFuture Dasar

mari kita mulai dengan contoh sederhana:

CompletableFuture<String> future = CompletableFuture.supplyAsync(() -> {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
return "Halo, Future!";
});

System.out.println(future.get());

Dalam kode ini, kita menciptakan CompletableFuture yang akan mengembalikan String. Metode supplyAsync menjalankan kode kita di thread yang terpisah. Kita mensimulasikan pekerjaan dengan membuat thread tidur selama satu detik. Setelah itu, ia mengembalikan pesan salam. Metode get() menunggu future selesai dan memberikan kita hasilnya.

Support untuk Delay dan Timeout

Salah satu peningkatan menarik di API CompletableFuture adalah dukungan yang lebih baik untuk delay dan timeout. Hal ini seperti menyetel timer di dapur Anda - Anda tidak ingin saus Anda mendidih selamanya!

Contoh Delay

CompletableFuture<String> future = CompletableFuture.supplyAsync(() -> "Halo")
.thenApply(s -> s + ", Dunia!")
.completeOnTimeout("Timeout terjadi", 2, TimeUnit.SECONDS)
.orTimeout(3, TimeUnit.SECONDS);

System.out.println(future.get());

Dalam contoh ini, kita menciptakan future yang mengatakan "Halo", kemudian memodifikasinya menjadi "Halo, Dunia!". Kita menggunakan dua metode baru:

  1. completeOnTimeout: Ini akan menyelesaikan future dengan nilai default jika tidak selesai dalam 2 detik.
  2. orTimeout: Ini akan melempar exception jika future tidak selesai dalam 3 detik.

Dengan cara ini, kita memastikan bahwa kode kita tidak terhenti jika ada kesalahan yang terjadi.

Peningkatan Dukungan untuk Subclassing

Kelas CompletableFuture sekarang mudah untuk diperpanjang, memungkinkan Anda untuk menciptakan versi spesialisasi sendiri. Hal ini seperti dapat menciptakan peralatan dapur khusus yang melakukan persis apa yang Anda perlukan!

Contoh Subclassing

public class MyFuture<T> extends CompletableFuture<T> {
@Override
public <U> MyFuture<U> thenApply(Function<? super T, ? extends U> fn) {
return (MyFuture<U>) super.thenApply(fn);
}

// Lain-lain metode yang diperpanjang...
}

MyFuture<String> myFuture = new MyFuture<>();
myFuture.complete("Halo, Future Khusus!");
System.out.println(myFuture.get());

Dalam contoh ini, kita menciptakan kelas MyFuture yang mengextends CompletableFuture. Kita mengganti metode thenApply agar mengembalikan jenis future khusus kita. Hal ini memungkinkan kita untuk mengkaitkan operasi sambil menjaga jenis khusus kita.

Metode Factory Baru

Java telah memperkenalkan metode factory baru untuk membuat CompletableFutures menjadi lebih mudah. Hal ini seperti memiliki resep siap pakai di bukunya!

Tabel Metode Factory

Metode Deskripsi
failedFuture(Throwable ex) Membuat CompletableFuture yang sudah selesai secara exceptional
completedStage(T value) Membuat CompletionStage yang sudah selesai dengan nilai yang diberikan
failedStage(Throwable ex) Membuat CompletionStage yang sudah selesai secara exceptional

Contoh Metode Factory

CompletableFuture<String> successFuture = CompletableFuture.completedFuture("Sukses!");
CompletableFuture<String> failedFuture = CompletableFuture.failedFuture(new Exception("Ups!"));

try {
System.out.println(successFuture.get());
System.out.println(failedFuture.get());
} catch (Exception e) {
System.out.println("Terjadi kesalahan: " + e.getMessage());
}

Dalam contoh ini, kita menggunakan metode completedFuture untuk menciptakan future yang sudah sukses, dan metode failedFuture untuk menciptakan satu yang sudah gagal. Hal ini dapat berguna untuk pengujian atau saat Anda perlu mengintegrasikan kode sinkron dan asinkron.

Kesimpulan

Wah! Kita telah meliputi banyak hal hari ini. Dari memahami dasar CompletableFuture ke peningkatan yang baru, Anda telah mengambil langkah pertama ke dunia pemrograman asinkron di Java. Ingat, seperti memasak, memahami konsep ini memerlukan latihan. Jangan khawatir untuk mencoba dan membuat kesalahan - itu adalah bagaimana kita belajar!

Dalam tahun-tahun saya mengajar, saya menemukan bahwa siswa yang sukses adalah mereka yang tidak khawatir untuk mencicipi kode. Jadi, saya mendorong Anda untuk mengambil contoh ini, memodifikasinya, merusaknya, dan lihat apa yang terjadi. Itu cara terbaik untuk benar-benar memahami bagaimana mereka bekerja.

Sebagai penutup, saya diingatkan oleh seorang siswa yang pernah mengatakan bahwa belajar CompletableFuture seperti belajar jongkok - awalnya, tampaknya mustahil untuk menjaga semua bola di udara, tetapi dengan latihan, itu menjadi kebiasaan. Jadi terus latihan, dan sebelum Anda tahu, Anda akan menjongkok operasi asinkron kompleks seperti seorang pro!

Selamat pemrograman, para master Java masa depan!

Credits: Image by storyset