1. Konsep
Masa Depan mewakili hasil tugas asinkron yang mungkin belum selesai. Callback dapat ditambahkan ke hasil ini untuk melakukan operasi terkait setelah eksekusi tugas berhasil atau gagal.
2. Antarmuka masa depan
Antarmuka Future mendefinisikan lima metode antarmuka utama. RunnableFuture dan ScheduleFuture mewarisi antarmuka ini, dan CompleteFuture serta ForkJoinTask mewarisi antarmuka ini.
3. Contoh
tes paket; import java.util.concurrent.Callable; import java.util.bersamaan.ExecutionException; import java.util.bersamaan.FutureTask; kelas publik CallableFutureTest { public static void main(String[] args) { startTime panjang = Sistem.currentTimeMillis(); Dapat dipanggil<Bilangan Bulat> kalkulasiCallable = baru Dapat Dipanggil<Bilangan Bulat>() { @Mengesampingkan panggilan Integer publik() memunculkan Pengecualian { // TODO Stub metode yang dibuat secara otomatis Thread.sleep(2000); //Simulasi memakan waktu int hasil = 1+2; hasil pengembalian; } }; FutureTask<Integer> hitungFutureTask = FutureTask baru<>(calculateCallable); Utas t1 = Utas baru (hitung Tugas Masa Depan); t1.mulai(); //Sekarang bergabunglah dengan Thread untuk menjalankan layanan yang memakan waktu yang menyimulasikan panggilan jarak jauh dan bergantung pada hasil perhitungannya (seperti kalkulator jaringan) mencoba { //Mensimulasikan tugas yang memakan waktu, thread utama melakukan tugasnya sendiri, mencerminkan keunggulan multi-threading Thread.sleep(3000); int a = 3+5; Hasil bilangan bulat = hitungFutureTask.get(); System.out.println("result = "+(a+result));//Simulasikan hasil yang berjalan dari thread utama dengan mengandalkan sub-thread long endTime = System.currentTimeMillis(); System.out.println("time = "+(endTime-startTime)+"ms"); } catch (InterruptedException | ExecutionException e) { // TODO Blok tangkapan yang dibuat secara otomatis e.printStackTrace(); } } }
Seperti yang Anda lihat di atas, waktu yang dibutuhkan di atas adalah sekitar 3 detik. Faktanya, ini sebagian besar adalah waktu yang dihabiskan oleh thread utama sleep(3000). waktu yang mungkin kita perlukan mungkin 5 detik (sub-thread 2s+ thread utama 3s).
Di atas adalah cara Future memperoleh hasil thread di Java. Bisa dikatakan Future lebih fleksibel dalam memproses thread. Mekanismenya kira-kira ketika satu thread berjalan, thread lain berjalan pada waktu yang bersamaan. Jika Anda tertarik, Anda dapat mempelajari lebih lanjut setelah kelas.