Pada platform Java, peran yang menerapkan panggilan asinkron memiliki tiga peran berikut: data nyata penelepon dalam Bill of Lading
Ketika seorang penelepon memanggil operasi yang memakan waktu dan tidak dapat segera mengembalikan data, ia akan mengembalikan tagihan lading.
Pergi ke toko kue untuk membeli kue, Anda tidak perlu menunggu kue dibuat (dengan asumsi butuh waktu lama untuk membuatnya), Anda hanya perlu mendapatkan tagihan lading (pergi melakukan hal lain) Saat kue sudah siap, Anda bisa mendapatkan tagihan kue itu baik -baik saja.
Public Main {public static void main (string [] args) {System.out.println ("Main begin Data2 = Host.Request (20, 'B'); Catch (InterruptedException E) {} System.out.println ("Ujung Main OtherJob"); data2 .getContent ());
Kelas utama di sini setara dengan "pelanggan", dan tuan rumah setara dengan "toko kue". setara dengan mengambil barang. Setelah periode waktu tertentu (setelah tidur untuk jangka waktu tertentu), hubungi data1.getContent (), yang berarti mendapatkan tagihan lading untuk mendapatkan hasil eksekusi.
Mari kita lihat apa yang dilakukan toko kue setelah pelanggan memesan kue:
host kelas publik {permintaan data publik (jumlah int akhir, char final c) {system.out.println ("request (" + count + "," + c + ") begin"); Entity Final Futuredata Future = New Futuredata (); kelas dalam. RealData RealData = RealData baru (Count, C); // (3) ambil entitas futuredata sebagai nilai pengembalian masa depan;}}
Setelah menerima permintaan itu, tuan rumah ("toko kue") menjadi contoh masa depan "Book of Lading" Futuredata, dan kemudian memesan "pembuat kue" untuk membuat kue. . Lalu apa yang akan dikembalikan oleh tuan rumah kepada pelanggan hanyalah masa depan "Book of Lading", bukan kue. Setelah kue selesai, pembuat kue dapat memberikan kue "Book of Lading" yang sesuai, yaitu Future.setrealdata (RealData).
Mari kita lihat bagaimana pembuat kue membuat kue:
Buat string yang berisi karakter C Count.
Kelas Publik RealData mengimplementasikan Data {Private Final String Content; buffer = Char baru [Hitung]; .println (membuat realData (" + count +", " + c +") end ");
Sekarang mari kita lihat bagaimana masa depan "Bill of Lading" sesuai dengan "konten" kue:
Public Futuredata mengimplementasikan data {RealData Private RealData = NULL; } this.realdata = realData; ();}}
Setelah pelanggan menyelesaikan bisnisnya sendiri, ia akan mengambil "Book of Lading" sendiri untuk mengambil kue:
System.out.println ("data1 =" + data1.getContent ());
Jika kue belum siap, Anda harus menunggu:
while (! Ready) {coba {tunggu ();
Analisis program
Untuk setiap permintaan, host akan menghasilkan utas, yang bertanggung jawab untuk menghasilkan "kue" yang dibutuhkan oleh pelanggan. Setelah menunggu sebentar, jika kue belum siap, pelanggan harus menunggu. Pelanggan hanya dapat mengambil kue sampai "kue dibuat", yaitu, Future.setrealdata (RealData);
Setiap utas hanya bertanggung jawab untuk membuat "kue" yang dibutuhkan pelanggan tertentu. Artinya, Pelanggan A sesuai dengan Master Kue A, dan Pelanggan B sesuai dengan Cake Master B. Bahkan jika Kue Pelanggan B disiapkan terlebih dahulu, Pelanggan A hanya dapat menunggu Master Kue A untuk menyiapkan kue. Dengan kata lain, tidak ada hubungan kompetitif antara pelanggan.
Dua metode futuredata diatur untuk disinkronkan. Itu penting apakah kue sudah siap.
Ini di seluruh artikel ini.