Instruksi Countdownlatch adalah untuk referensi Anda. Konten spesifiknya adalah sebagai berikut
Countdownlatch adalah paket Java.util.concurrent Next Synchronication Tool Class yang memungkinkan satu atau lebih utas menunggu sampai satu set operasi selesai di utas lain.
Penggunaan Countdownlatch sangat sederhana. Contoh berikut juga apa yang saya lihat secara online, dan itu sangat tepat. Saya akan mempostingnya di sini.
tes kelas publik {public static void main (string [] args) {countDownlatch begin = countDownlatch baru (1); Countdownlatch end = New Countdownlatch (2); untuk (int i = 0; i <2; i ++) {thread thread = utas baru (pemain baru (begin, end)); thread.start (); } coba {System.out.println ("The Race Begin"); begin.countdown (); end.aWait (); System.out.println ("The Race End"); } catch (Exception e) {E.PrintStackTrace (); }}}/*** player*/class player mengimplementasikan runnable {private countdownlatch begin; akhir hitungan mundur pribadi; Player (CountdownLatch Begin, CountdownLatch end) {this.begin = begin; this.end = end; } public void run () {coba {begin.Await (); System.out.println (thread.currentThread (). GetName () + "tiba!") ;; end.countdown (); } catch (InterruptedException e) {E.PrintStackTrace (); }}}Di bawah ini adalah hasil berjalan
Anda dapat melihat bahwa melalui penggunaan Countdownlatch, kami mengontrol urutan eksekusi utas.
Dalam kode di atas, kami menggunakan metode AWAIT () dan metode hitung mundur (). Mari kita verifikasi fungsi masing -masing.
Pertama verifikasi metode waku (). Komentari The End.Await () dalam metode utama. Berikut ini adalah hasil lari setelah berkomentar.
Anda dapat melihat bahwa utas utama tidak menunggu utas yang mewakili kontestan berakhir, dan secara langsung mengumumkan bahwa kompetisi sudah berakhir! Permainan yang berakhir di awal ---
Dapat dilihat di sini bahwa metode menunggu () memiliki efek pemblokiran
Kedua, mari kita verifikasi metode hitung mundur, dan komentari akhir.countdown () di utas kontestan. Berikut ini adalah hasil berjalan.
Program ini telah berjalan, dan semua pemain telah mencapai garis finish, tetapi wasit tidak mempromosikan akhir pertandingan. Apa yang dia tunggu?
Kami menduga bahwa metode Countdown () memiliki efek membangunkan utas pemblokiran.
Kemudian kita mungkin bertanya, karena memiliki fungsi membangunkan utas pemblokiran, bukankah mungkin untuk membangunkan utas utama yang diblokir jika kita hanya memanggil metode hitung mundur () sekali?
Mari kita coba, unkromment anotasi coutdown () di atas, buat pemain lagi, kodenya adalah sebagai berikut
class player2 mengimplementasikan runnable {private countDownlatch begin; akhir hitungan mundur pribadi; Player2 (CountdownLatch Begin, CountdownLatch end) {this.begin = begin; this.end = end; } public void run () {coba {begin.Await (); System.out.println (thread.currentThread (). GetName () + "tiba!"); // end.countdown (); } catch (InterruptedException e) {E.PrintStackTrace (); }}}Metode utama juga dimodifikasi sebagai berikut, menciptakan dua pemain yang berbeda
public static void main (string [] args) {countDownlatch begin = countDownlatch baru (1); Countdownlatch end = New Countdownlatch (2); Thread Thread = Thread Baru (Pemain Baru (Mulai, Akhir)); thread.start (); Thread thread2 = utas baru (Player2 baru (Begin, End)); thread2.start (); coba {System.out.println ("The Race Begin"); begin.countdown (); end.aWait (); System.out.println ("The Race End"); } catch (Exception e) {E.PrintStackTrace (); }}Jalankan, inilah hasilnya
Program utama telah diblokir dan belum terbangun. Wasit telah menggunakan toilet untuk sementara waktu!
Tampaknya Countdown () tidak secara langsung membangunkan utas, itu sedikit seperti penghitung, Countdown.
Periksa dokumentasi API, cukup pasti, kami menambahkan parameter 2 ke konstruktor, dan kami perlu memanggil hitung mundur () 2 kali untuk membangunkan utas yang diblokir dari end.aWait ().
Countdownlatch end = New Countdownlatch (2);
Singkatnya,
1. Countdownlatch end = New Countdownlatch (n); // Saat membuat objek, Anda harus lulus dalam parameter N.
2. END.AWAIT () dapat memblokir utas sampai metode akhir.countdown () disebut n kali sebelum utas dilepaskan.
3. end.countdown () dapat dipanggil di beberapa utas untuk menghitung jumlah panggilan yang merupakan jumlah dari semua utas.
Di blog berikutnya, saya akan menjelaskan cara kerja CountdownLatch dari tingkat kode sumber.
Di atas adalah semua konten artikel ini. Saya berharap ini akan membantu untuk pembelajaran semua orang dan saya harap semua orang akan lebih mendukung wulin.com.