Kedua-dua CountDownLatch dan CyclicBarrier digunakan dalam persekitaran berbilang benang, dan kedua-duanya adalah sebahagian daripada persekitaran berbilang benang.
Menurut Java Doc -
CountDownLatch - Alat bantuan penyegerakan yang membolehkan satu atau lebih utas menunggu sehingga satu set operasi yang dilakukan dalam urutan lain selesai.
CyclicBarrier - Alat bantuan penyegerakan yang membolehkan sekumpulan benang menunggu antara satu sama lain untuk mencapai titik halangan yang sama.
En. No. | key | cyclicbarrier | countdownlatch |
---|---|---|---|
1 | basic | membolehkan penyegerakan sekumpulan benang yang menunggu satu sama lain untuk mencapai titik penghalang yang sama. | Alat bantuan penyegerakan yang membolehkan satu atau lebih utas menunggu sehingga satu set operasi yang dilakukan dalam urutan lain selesai. |
2 | Runnable | Ia mempunyai pembina yang menyediakan Runnable. | Ia tidak mempunyai pembina sedemikian | Boleh advance |
Tidak digalakkan guna |
Disyorkan untuk digunakan. |
tr>5 |
exception |
Jika satu benang terganggu semasa menunggu, semua benang menunggu yang lain akan membuang b rokenbarrierexcepti |
Contoh CyclicBarrierpublic class Main { public static void main(String args[]) throws InterruptedException { ExecutorService executors = Executors.newFixedThreadPool(4); CyclicBarrier cyclicBarrier = new CyclicBarrier(5); executors.submit(new Service1(cyclicBarrier)); executors.submit(new Service1(cyclicBarrier)); executors.submit(new Service2(cyclicBarrier)); executors.submit(new Service2(cyclicBarrier)); executors.submit(new Service2(cyclicBarrier)); Thread.sleep(3000); System.out.println("Done"); } } import java.util.concurrent.BrokenBarrierException; import java.util.concurrent.CyclicBarrier; public class Service1 implements Runnable { CyclicBarrier cyclicBarrier; public Service1(CyclicBarrier cyclicBarrier) { super(); this.cyclicBarrier = cyclicBarrier; } @Override public void run() { System.out.println("Services1" + cyclicBarrier.getNumberWaiting()); while (true) { try { cyclicBarrier.await(); } catch (InterruptedException | BrokenBarrierException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } import java.util.concurrent.BrokenBarrierException; import java.util.concurrent.CyclicBarrier; public class Service2 implements Runnable { CyclicBarrier cyclicBarrier; public Service2(CyclicBarrier cyclicBarrier) { super(); this.cyclicBarrier = cyclicBarrier; } @Override public void run() { System.out.println("Services2" + cyclicBarrier.getNumberWaiting()); while (true) { try { cyclicBarrier.await(); } catch (InterruptedException | BrokenBarrierException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } Salin selepas log masuk | Contoh CountDownLatch|
Atas ialah kandungan terperinci Apakah perbezaan antara CountDownLatch dan CyclicBarrier dalam konkurensi Java?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!