0Pricing
Java Academy · Pelajaran

Membuat dan Menyelesaikan CompletableFutures

Gunakan supplyAsync, runAsync, completedFuture, serta selesaikan future secara manual dengan complete dan completeExceptionally.

Membuat dan Menyelesaikan CompletableFutures adalah pelajaran Java Academy gratis di CoddyKit. Ini adalah pelajaran 1 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Java Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Java Academy mencakup 4 pelajaran total.

Apa Itu CompletableFuture?

CompletableFuture<T> (Java 8+) merepresentasikan komputasi asinkron yang dapat diselesaikan, dirangkai, dan digabungkan secara eksplisit. Ini mengimplementasikan Future dan CompletionStage.

supplyAsync: Memulai Komputasi Asinkron

CompletableFuture.supplyAsync() menjalankan Supplier pada ForkJoinPool umum dan mengembalikan future yang berisi hasilnya.

CompletableFuture<String> future = CompletableFuture.supplyAsync(() -> {
    // runs on ForkJoinPool.commonPool()
    return fetchDataFromNetwork();
});
System.out.println("Non-blocking — this runs immediately");

runAsync: Jalankan dan Lupakan

runAsync() menjalankan Runnable secara asinkron dan mengembalikan CompletableFuture<Void>. Gunakan ini jika Anda tidak memerlukan hasil.

CompletableFuture<Void> task = CompletableFuture.runAsync(() ->
    sendEmail("user@example.com", "Welcome!"));
task.thenRun(() -> System.out.println("Email sent"));

Pelaksana Kustom

Teruskan Executor kustom untuk mengontrol kumpulan utas yang digunakan dalam komputasi — hal ini penting dalam aplikasi web ketika Anda ingin menghindari pemblokiran kumpulan umum.

ExecutorService pool = Executors.newFixedThreadPool(10);
CompletableFuture<User> future = CompletableFuture.supplyAsync(
    () -> userService.findById(42L), pool
);

completedFuture: Nilai yang Sudah Selesai

CompletableFuture.completedFuture(value) mengembalikan future yang sudah selesai. Ini berguna untuk pengujian atau ketika Anda memiliki nilai langsung untuk dikembalikan dalam alur asinkron.

CompletableFuture<String> cached = CompletableFuture.completedFuture("cached-value");
cached.thenAccept(System.out::println); // runs immediately

Menyelesaikan Future Secara Manual

Gunakan complete() untuk memberikan hasil dari luar komputasi. Gunakan completeExceptionally() untuk menandakan kegagalan.

CompletableFuture<String> promise = new CompletableFuture<>();
// In another thread or callback:
promise.complete("done!");       // signals success
// promise.completeExceptionally(new RuntimeException("fail")); // signals failure
String result = promise.get();   // blocks until completed

get() dan join()

Keduanya, get() dan join(), memblokir sampai future selesai. get() melempar pengecualian terperiksa; join() membungkusnya dalam CompletionException yang tidak terperiksa.

try {
    String r = future.get(5, TimeUnit.SECONDS); // checked exceptions
} catch (TimeoutException | InterruptedException | ExecutionException e) { ... }
// Or:
String r = future.join(); // throws CompletionException (unchecked)

getNow() untuk Pemeriksaan Tanpa Pemblokiran

getNow(defaultValue) mengembalikan hasil jika sudah selesai, atau nilai bawaan yang diberikan jika belum — tanpa pemblokiran dan tanpa menunggu.

String result = future.getNow("loading...");
System.out.println(result); // "loading..." if not yet done

isDone, isCancelled, isCompletedExceptionally

Periksa keadaan future tanpa pemblokiran. Gabungkan pemeriksaan ini dalam perulangan pemeriksaan berkala atau kode pemantauan.

if (future.isDone())                    System.out.println("Completed");
if (future.isCancelled())               System.out.println("Cancelled");
if (future.isCompletedExceptionally()) System.out.println("Failed");

cancel() untuk Menangani Batas Waktu

Panggil cancel(true) untuk membatalkan komputasi yang sedang berlangsung. Future berpindah ke keadaan dibatalkan dan setiap get() yang sedang memblokir akan melempar CancellationException.

CompletableFuture<String> future = fetchAsync();
ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
scheduler.schedule(() -> future.cancel(true), 3, TimeUnit.SECONDS);

completeOnTimeout (Java 9+)

completeOnTimeout(value, timeout, unit) secara otomatis menyelesaikan future dengan nilai bawaan jika future belum selesai dalam batas waktu — lebih rapi daripada pembatalan manual.

CompletableFuture<String> result = fetchAsync()
    .completeOnTimeout("default", 3, TimeUnit.SECONDS);
System.out.println(result.join()); // "default" if fetch took > 3s

Pemeriksaan Singkat

Metode mana yang memulai komputasi asinkron pada ForkJoinPool umum dan mengembalikan nilai?

Ringkasan

supplyAsync / runAsync memulai pekerjaan asinkron. complete / completeExceptionally menyelesaikan future secara manual. Gunakan join() untuk pemblokiran dengan pengecualian yang tidak terperiksa. completeOnTimeout menangani batas waktu dengan rapi.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Membuat dan Menyelesaikan CompletableFutures” gratis?

Ya — teks lengkap “Membuat dan Menyelesaikan CompletableFutures” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Java Academy, upgrade ke CoddyKit PRO. Kursus Java Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Membuat dan Menyelesaikan CompletableFutures”?

Gunakan supplyAsync, runAsync, completedFuture, serta selesaikan future secara manual dengan complete dan completeExceptionally. Kamu berlatih Java Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai Java Academy?

Tidak diperlukan pengalaman sebelumnya. Java Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 1 dari 4.

Berapa lama pelajaran “Membuat dan Menyelesaikan CompletableFutures” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran Java Academy ini?

Ya. Setiap pelajaran Java Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Membuat dan Menyelesaikan CompletableFutures
  2. Merangkai dengan thenApply dan thenCompose
  3. Menggabungkan Future: allOf dan anyOf
  4. Penanganan Error dan Alur HTTP Async
← Kembali ke Java Academy