Rumah >Java >javaTutorial >Apakah CyclicBarrier? Fakta dan Contoh Utama Diterangkan

Apakah CyclicBarrier? Fakta dan Contoh Utama Diterangkan

Barbara Streisand
Barbara Streisandasal
2024-10-09 06:08:29653semak imbas

What Is CyclicBarrier? Key Facts and Examples Explained

1. Apakah itu Penghalang Kitaran?

A CyclicBarrier ialah bantuan penyegerakan yang membolehkan satu set benang untuk semua menunggu antara satu sama lain untuk mencapai titik halangan yang sama. Setelah semua benang mencapai penghalang, mereka dilepaskan untuk meneruskan kerja mereka. Penghalang dipanggil "kitaran" kerana ia boleh digunakan semula selepas benang menunggu dilepaskan.

1.1 Ciri Utama CyclicBarrier

  • Kebolehgunaan semula : Tidak seperti alat bantuan penyegerakan lain seperti CountDownLatch , CyclicBarrier boleh ditetapkan semula dan digunakan semula selepas semua urutan dikeluarkan.
  • Tindakan Penghalang : Secara pilihan, anda boleh menentukan tindakan penghalang yang dilaksanakan sebaik sahaja semua rangkaian mencapai penghalang.
  • Fleksibiliti : Ia berguna dalam senario di mana berbilang utas perlu menunggu antara satu sama lain untuk melengkapkan fasa sebelum meneruskan ke seterusnya.

1.2 Bagaimana CyclicBarrier Berfungsi

  • Permulaan : Penghalang Kitaran dimulakan dengan beberapa pihak (benang) yang perlu menunggu di penghalang.
  • Menunggu : Setiap urutan memanggil kaedah await() pada penghalang.
  • Lepaskan : Apabila utas terakhir mencapai penghalang, semua utas menunggu dilepaskan dan tindakan penghalang pilihan (jika disediakan) dilaksanakan.
  • Guna Semula : Penghalang ditetapkan semula dan boleh digunakan semula untuk kitaran menunggu yang lain.

1.3 Kes Penggunaan Biasa

  • Pemprosesan Kelompok : Apabila memproses data dalam kelompok, benang boleh menggunakan CyclicBarrier untuk menyegerak pada penghujung setiap kelompok.
  • Algoritma Selari : Dalam algoritma selari, benang selalunya perlu disegerakkan selepas menyelesaikan fasa pengiraan tertentu.

2. Contoh Praktikal dan Demo

Untuk lebih memahami cara CyclicBarrier berfungsi, mari lihat contoh praktikal dan demo.

2.1 Contoh Kod

Berikut ialah contoh mudah yang menunjukkan penggunaan CyclicBarrier :

import java.util.concurrent.BrokenBarrierException;
import java.util.concurrent.CyclicBarrier;

public class CyclicBarrierDemo {
    public static void main(String[] args) {
        final int numberOfThreads = 3;
        CyclicBarrier barrier = new CyclicBarrier(numberOfThreads, new BarrierAction());

        for (int i = 0; i < numberOfThreads; i++) {
            new Thread(new Task(barrier)).start();
        }
    }
}

class Task implements Runnable {
    private final CyclicBarrier barrier;

    Task(CyclicBarrier barrier) {
        this.barrier = barrier;
    }

    @Override
    public void run() {
        try {
            System.out.println(Thread.currentThread().getName() + " is waiting at the barrier.");
            barrier.await();
            System.out.println(Thread.currentThread().getName() + " has passed the barrier.");
        } catch (InterruptedException | BrokenBarrierException e) {
            e.printStackTrace();
        }
    }
}

class BarrierAction implements Runnable {
    @Override
    public void run() {
        System.out.println("Barrier Action executed. All threads are released.");
    }
}

2.2 Keputusan Demo

Apabila anda menjalankan kod di atas, anda akan melihat urutan berikut:

  • Setiap utas mencetak mesej yang menunjukkan bahawa ia sedang menunggu di penghalang.
  • Setelah semua utas mencapai penghalang, BarrierAction dilaksanakan, mencetak "Barrier Action executed. Semua thread dilepaskan."
  • Setiap utas kemudian mencetak mesej yang menunjukkan bahawa ia telah melepasi halangan.

Berikut ialah contoh output:

Thread-0 is waiting at the barrier.
Thread-1 is waiting at the barrier.
Thread-2 is waiting at the barrier.
Barrier Action executed. All threads are released.
Thread-0 has passed the barrier.
Thread-1 has passed the barrier.
Thread-2 has passed the barrier.

3. Kesimpulan

A CyclicBarrier ialah alat yang tidak ternilai untuk menyelaraskan berbilang urutan dalam Java. Ia membolehkan benang menunggu antara satu sama lain dan boleh digunakan semula merentasi berbilang kitaran, menjadikannya sesuai untuk banyak senario penyegerakan. Sama ada anda memproses data dalam kelompok atau melaksanakan algoritma selari, memahami cara menggunakan CyclicBarrier dengan berkesan akan meningkatkan kemahiran pengaturcaraan berbilang benang anda.

Jangan ragu untuk mengulas di bawah jika anda mempunyai sebarang soalan atau memerlukan penjelasan lanjut tentang menggunakan CyclicBarrier dalam projek anda!

Baca siaran lebih lanjut di : Apakah CyclicBarrier? Fakta dan Contoh Utama Diterangkan

Atas ialah kandungan terperinci Apakah CyclicBarrier? Fakta dan Contoh Utama Diterangkan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel sebelumnya:Masalah warisan berbilangArtikel seterusnya:Masalah warisan berbilang