Rumah > Java > javaTutorial > Apakah perbezaan antara CountDownLatch dan CyclicBarrier dalam konkurensi Java?

Apakah perbezaan antara CountDownLatch dan CyclicBarrier dalam konkurensi Java?

WBOY
Lepaskan: 2023-09-06 15:33:12
ke hadapan
1286 orang telah melayarinya

Apakah perbezaan antara CountDownLatch dan CyclicBarrier dalam konkurensi Java?

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.

4. tr>5Contoh CountDownLatch
public class Main {
   public static void main(String args[]) throws InterruptedException {
      ExecutorService executors = Executors.newFixedThreadPool(4);
      CountDownLatch latch= new CountDownLatch(2);
      executors.submit(new Service1(latch));
      executors.submit(new Service2(latch));
      latch.await();
      System.out.println("Done");
   }
}
import java.util.concurrent.CountDownLatch;

public class Service1 implements Runnable {

   CountDownLatch latch;
   public Service1(CountDownLatch latch) {
      super();
      this.latch = latch;
   }

   @Override
   public void run() {
      try {
         Thread.sleep(20000);
      } catch (InterruptedException e) {
         // TODO Auto-generated catch block
         e.printStackTrace();
      }
      latch.countDown();
      System.out.println("Services2"+latch.getCount());
   }
}
import java.util.concurrent.CountDownLatch;
public class Service2 implements Runnable {
   CountDownLatch latch;
   public Service2(CountDownLatch latch) {
      super();
      this.latch = latch;
   }
   @Override
   public void run() {
      try {
         Thread.sleep(20000);
      } catch (InterruptedException e) {
         // TODO Auto-generated catch block
         e.printStackTrace();
      }
      latch.countDown();
      System.out.println("Services2"+latch.getCount());
   }
}
Salin selepas log masuk

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.

exception

Jika satu benang terganggu semasa menunggu, semua benang menunggu yang lain akan membuang b rokenbarrierexcepti

Contoh CyclicBarrier

public 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

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!

sumber:tutorialspoint.com
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan