Copy kode kodenya sebagai berikut:
kelas publik TestCyclicBarrier {
int akhir statis pribadi THREAD_NUM = 5;
WorkerThread kelas statis publik mengimplementasikan Runnable{
Penghalang CyclicBarrier;
Utas Pekerja publik(CyclicBarrier b){
this.penghalang = b;
}
@Mengesampingkan
menjalankan kekosongan publik() {
// TODO Stub metode yang dibuat secara otomatis
mencoba{
System.out.println("Pekerja sedang menunggu");
//Thread menunggu di sini sampai semua thread mencapai penghalang.
penghalang.menunggu();
System.out.println("ID:"+Thread.currentThread().getId()+" Berfungsi");
}menangkap(Pengecualian e){
e.printStackTrace();
}
}
}
/**
* @param argumen
*/
public static void main(String[] args) {
// TODO Stub metode yang dibuat secara otomatis
CyclicBarrier cb = CyclicBarrier baru(THREAD_NUM, Runnable baru() {
//Dieksekusi ketika semua thread mencapai penghalang
@Mengesampingkan
menjalankan kekosongan publik() {
// TODO Stub metode yang dibuat secara otomatis
System.out.println("Di Dalam Penghalang");
}
});
untuk(int i=0;i<THREAD_NUM;i++){
Utas baru(Utas Pekerja baru(cb)).mulai();
}
}
}
/*
Inilah hasilnya:
Pekerja sedang menunggu
Pekerja sedang menunggu
Pekerja sedang menunggu
Pekerja sedang menunggu
Pekerja sedang menunggu
Di dalam Penghalang
ID:12 Bekerja
ID:8 Bekerja
ID:11 Bekerja
ID:9 Bekerja
ID:10 Bekerja
*/
1. Tentukan nomor saat CyclicBarrier diinisialisasi, lalu hitung jumlah thread yang memanggil CyclicBarrier.await() untuk menunggu. Ketika jumlah thread mencapai angka ini, semua thread yang telah memasuki status menunggu akan dibangunkan dan dilanjutkan.
2. CyclicBarrier, sesuai dengan namanya, dapat dianggap sebagai sebuah rintangan. Semua thread harus ada sebelum mereka dapat melewati rintangan tersebut bersama-sama.
3. CyclicBarrier juga dapat mengambil parameter Runnable pada awalnya. Tugas Runnable ini akan dijalankan setelah jumlah CyclicBarrier tercapai dan sebelum semua thread lainnya dibangunkan.