Kata pengantar:
Tes minggu lalu mengangkat bug ke modul yang dikembangkan oleh rekan -rekan pengembangan, dan itu masih kebetulan.
Setelah memeriksa kode dengan hati-hati, saya menemukan bahwa multi-threading diaktifkan dalam bisnis, dan 2 utas dijalankan pada saat yang sama, tetapi dua utas yang baru dimulai harus memastikan bahwa yang satu selesai dan yang lain terus berjalan untuk menghilangkan bug.
Kapan menggunakannya?
Multithreading digunakan di banyak tempat, tetapi jika kita ingin memulai utas lain setelah utas tertentu selesai, Countdownlatch bisa berguna.
Bagaimana cara menggunakannya?
Mari kita lihat kode multithreaded biasa:
kode paket; kelas publik mythread memperluas utas {public static void main (string [] args) {mythread th = new mythread (); Thread t1 = utas baru (th, "mythread"); t1.start (); System.out.println (thread.currentThread (). GetName ()); } public void run () {myThread1 th2 = myThread1 () baru; Utas T2 = utas baru (Th2, "MyThread1"); t2.start (); System.out.println (this.currentThread (). GetName ()); } class myThread1 memperluas utas {public void run () {coba {thread.sleep (1000); } catch (InterruptedException E) {// TODO Auto-Encanerated Catch Block E.PrintStackTrace (); } System.out.println (this.currentThread (). GetName ()); }}}Kode seperti di atas. Pertama, gunakan MyThread untuk mewarisi kelas utas, dan kemudian tulis kelas MyThread1 lain di dalam kelas MyThread, yang juga mewarisi kelas utas, dan membiarkannya tidur selama 1 detik dalam metode run. Dengan cara ini, kode akan dicetak:
Dari urutan output di atas, kita dapat melihat bahwa utas utama pertama kali dimulai, dan kemudian utas MyThread dimulai. Di utas MyThread, utas MyThread1 dimulai. Namun, karena utas MyThread1 tidur selama 1 detik, itu mensimulasikan pemrosesan bisnis berikutnya, jadi itu akan sedikit lebih lambat dari mythread selesai.
Sekarang, tambahkan CountdownLatch ke kode, dan biarkan MyThread1 berjalan terlebih dahulu, dan kemudian biarkan MyThread terus berjalan.
kode paket; import java.util.concurrent.countdownlatch; kelas publik mythread memperluas utas {countdownlatch countDownlatch = countDownlatch baru (1); public static void main (string [] args) {mythread th = new mythread (); Thread t1 = utas baru (th, "mythread"); t1.start (); System.out.println (thread.currentThread (). GetName ()); } public void run () {myThread1 th2 = myThread1 () baru; Utas T2 = utas baru (Th2, "MyThread1"); t2.start (); coba {CountdownLatch.AWAIT (); } catch (InterruptedException e) {E.PrintStackTrace (); } System.out.println (this.currentThread (). GetName ()); } class myThread1 memperluas utas {public void run () {coba {thread.sleep (1000); } catch (InterruptedException e) {E.PrintStackTrace (); } System.out.println (this.currentThread (). GetName ()); Countdownlatch.countdown (); }}}Metode penulisan kode ditunjukkan di atas, secara kasar dibagi menjadi tiga langkah
1. Mari parameter objek hitung mundur baru yang pertama diatur ke 1 (saya pribadi mengerti ini seperti array baru. Ketika array dihapus, maka utas yang terganggu dapat terus berjalan)
2. Call CountdownLatch.AWAIT () di kelas MyThread; untuk berhenti menjalankan utas saat ini.
3. Hubungi metode CountdownLatch.countdown () di kelas MyThread1. Ketika semua MyThread1 dieksekusi, dan metode akhirnya disebut, fungsinya adalah untuk menghapus "array" yang saya sebutkan.
Lihat hasil cetak output
Hasilnya seperti yang ditunjukkan pada gambar di atas, yang sejalan dengan hasil yang diharapkan.
Akhirnya, mari kita bicara tentang CountdownLatch Countdownlatch = CountdownLatch baru (1). Atur 1 di area ini, jadi Anda perlu menghubungi CountdownLatch.countdown () sekali untuk mengurangi 1.
Jika itu adalah nomor lain, jumlah kali yang sesuai harus dipanggil, jika tidak, call calldownlatch.Await () tidak akan dieksekusi.
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.