Salinan kode adalah sebagai berikut:
paket com.yao;
impor java.util.random;
impor java.util.concurrent.cyclicbarrier;
/**
* Cyclicbarrier mirip dengan Countdownlatch, dan juga merupakan penghitung.
* Perbedaannya adalah bahwa jumlah cyclicbarrier disebut cyclicbarrier.Await () untuk memasukkan nomor tunggu.
* Ketika jumlah utas mencapai jumlah yang ditentukan pada waktu awal cyclicbarrier, semua utas yang memasuki keadaan menunggu dibangunkan dan dilanjutkan.
* Cyclicbarrier, sama seperti namanya, dapat dianggap sebagai hambatan.
* Semua utas harus tiba sebelum mereka dapat melewati hambatan ini bersama -sama.
* Cyclicbarrier juga dapat memiliki parameter yang dapat dijalankan di awal.
* Setelah jumlah cyclicbarrier mencapai, semua utas lainnya dieksekusi sebelum dibangunkan.
*/
cyclicbarrierTest kelas publik {
komponen kelas statis publik mengimplementasikan runnable {
Penghalang cyclicbarrier; // counter
int id; // ID komponen
int [] array; // array data
// Metode Bangun
Public ComponentThread (CyclicBarrier Barrier, int [] array, int id) {
this.barrier = penghalang;
this.id = id;
this.array = array;
}
public void run () {
mencoba {
array [id] = random baru (). NextInt (100);
System.out.println ("Komponen" + ID + "menghasilkan:" + array [id]);
// tunggu penghalang di sini
System.out.println ("komponen" + id + "sleep ...");
Barrier.Await ();
System.out.println ("komponen" + id + "dibangunkan ...");
// Hitung nilai saat ini dan selanjutnya dalam array data
int result = array [id] + array [id + 1];
System.out.println ("Komponen" + ID + "Hasil:" + Hasil);
} catch (Exception ex) {
}
}
}
/**
* Uji penggunaan cyclicbarrier
*/
public static void testcyclicbarrier () {
final int [] array = int int [3];
Cyclicbarrier Barrier = Cyclicbarrier baru (2, runnable baru () {
// Jalankan saat semua utas tiba di penghalang
public void run () {
System.out.println ("TestCyClicBarrier Run ...");
array [2] = array [0] + array [1];
}
});
// Mulai utas
utas baru (komponen baru (penghalang, array, 0)). start ();
utas baru (komponen baru (penghalang, array, 1)). start ();
}
public static void main (string [] args) {
Cyclicbarriertest.testcyclicbarrier ();
}
}