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

Apakah perbezaan antara CountDownLatch dan CyclicBarrier dalam konkurensi Java?

Sep 06, 2023 pm 03:33 PM
cyclicbarrier countdownlatch java concurrency

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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

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!

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

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Bagaimana untuk mengendalikan akses serentak dalam pembangunan fungsi backend Java? Bagaimana untuk mengendalikan akses serentak dalam pembangunan fungsi backend Java? Aug 04, 2023 pm 08:22 PM

Bagaimana untuk mengendalikan akses serentak dalam pembangunan fungsi backend Java? Dalam aplikasi Internet moden, capaian serentak yang tinggi adalah cabaran biasa. Apabila berbilang pengguna mengakses perkhidmatan bahagian belakang pada masa yang sama, jika konkurensi tidak dikendalikan dengan betul, ia boleh membawa kepada isu seperti ketekalan data, prestasi dan keselamatan. Artikel ini akan memperkenalkan beberapa amalan terbaik untuk mengendalikan akses serentak dalam pembangunan backend Java. 1. Gunakan penyegerakan benang Java menyediakan pelbagai mekanisme untuk mengendalikan akses serentak, yang paling biasa digunakan ialah penyegerakan benang. Dengan menambahkan penyegerakan sebelum blok atau kaedah kod utama

Bagaimana untuk menggunakan rangka kerja Fork/Join dalam fungsi Java concurrency dan multi-threading? Bagaimana untuk menggunakan rangka kerja Fork/Join dalam fungsi Java concurrency dan multi-threading? Apr 27, 2024 am 10:09 AM

Bagaimana untuk membuat tugasan selari menggunakan rangka kerja Fork/Join di Java? Tentukan logik tugasan, kira keputusan atau lakukan tindakan. Cipta ForkJoinPool untuk mengurus benang selari. Gunakan kaedah fork() untuk menyerahkan tugas. Gunakan kaedah join() untuk mendapatkan hasil tugasan.

Penggunaan mekanisme refleksi dalam konkurensi Java? Penggunaan mekanisme refleksi dalam konkurensi Java? Apr 15, 2024 pm 09:03 PM

Jawapan: Mekanisme refleksi membolehkan program Java untuk memeriksa dan mengubah suai kelas dan objek pada masa jalan melalui API pantulan, yang boleh digunakan untuk melaksanakan mekanisme penyelarasan fleksibel dalam penyelarasan Java. Aplikasi: Buat benang secara dinamik. Tukar keutamaan benang secara dinamik. Suntikan kebergantungan.

Cara Membetulkan: Ralat Konkurensi Java: Pengesanan Kebuntuan Cara Membetulkan: Ralat Konkurensi Java: Pengesanan Kebuntuan Aug 25, 2023 pm 10:03 PM

Bagaimana untuk menyelesaikan: Ralat Java Concurrency: Deadlock Detection Deadlock ialah masalah biasa dalam pengaturcaraan berbilang benang. Kebuntuan berlaku apabila dua atau lebih utas menunggu antara satu sama lain untuk melepaskan sumber terkunci. Kebuntuan akan menyebabkan utas disekat, sumber tidak boleh dikeluarkan, dan program tidak dapat terus dilaksanakan, mengakibatkan kegagalan sistem. Untuk menyelesaikan masalah ini, Java menyediakan mekanisme pengesanan kebuntuan. Pengesanan jalan buntu menentukan sama ada terdapat jalan buntu dengan menyemak kebergantungan antara utas dan situasi beratur aplikasi sumber Setelah kebuntuan ditemui, sistem boleh mengambil langkah yang sepadan.

Apakah peranan menyekat baris gilir dalam konkurensi fungsi Java dan berbilang benang? Apakah peranan menyekat baris gilir dalam konkurensi fungsi Java dan berbilang benang? Apr 27, 2024 am 09:30 AM

Baris Gilir Menyekat: Alat Berkuasa untuk Baris Gilir Penyekatan dan Berbilang Benang ialah baris gilir selamat benang yang memainkan peranan penting berikut dalam pengaturcaraan serentak dan berbilang benang: Penyegerakan Benang: Mencegah keadaan perlumbaan dan ketidakkonsistenan data dengan menyekat operasi. Penampan data: Sebagai penimbal data, ia mengurangkan masalah ketidakpadanan dalam kelajuan benang pengeluar dan pengguna. Pengimbangan beban: Kawal bilangan elemen dalam baris gilir dan imbangi beban pengeluar dan pengguna.

Bagaimana untuk menentukan pembilang Java CountDownLatch dan penghalang kitaran CyclicBarrier Bagaimana untuk menentukan pembilang Java CountDownLatch dan penghalang kitaran CyclicBarrier May 21, 2023 pm 06:25 PM

Definisi CountDownLatch:Asynchronizationaidthatallowsone or morethreadstowaituntilasetoperationsbeing performedother otherthreadscompletes.CyclicBarrier:Asynchronizationaidthatallowsasesetofreadsto allwaitforechothertocapaicommonbarrierpoint. Secara mudahnya C

Cara menggunakan penghalang kitaran CyclicBarrier di Jawa Cara menggunakan penghalang kitaran CyclicBarrier di Jawa May 12, 2023 pm 02:19 PM

1. Pengenalan CyclicBarrier secara literal bermaksud halangan gelung (halangan kitaran Ia boleh membuat sekumpulan benang menunggu untuk keadaan tertentu (titik halangan) dan kemudian melaksanakan semuanya pada masa yang sama. Ia dipanggil loopback kerana CyclicBarrier boleh digunakan semula selepas semua benang menunggu dikeluarkan. Fungsi CyclicBarrier adalah untuk membuat sekumpulan utas menunggu antara satu sama lain Apabila titik biasa dicapai, semua utas yang menunggu sebelum ini terus dilaksanakan, dan fungsi CyclicBarrier boleh digunakan semula. 2. Kaedah pembinaan CyclicBarrier: //parties mewakili bilangan utas yang dipintas oleh halangan Setiap thread memanggil kaedah tunggu untuk memberitahu CyclicBarrier apa itu.

Cara menggunakan CyclicBarrier untuk konkurensi tinggi di Jawa Cara menggunakan CyclicBarrier untuk konkurensi tinggi di Jawa Apr 14, 2023 pm 07:07 PM

CyclicBarrier dalam Java ialah alat penyegerakan yang membenarkan berbilang utas menunggu di penghalang sehingga semua utas mencapai halangan sebelum pelaksanaan boleh diteruskan. CyclicBarrier boleh digunakan untuk menyelaraskan pelaksanaan berbilang benang supaya mereka boleh melaksanakan serentak pada titik tertentu. CyclicBarrier ialah alat penyegerakan dalam Java yang membenarkan berbilang utas menunggu pada titik halangan sehingga semua utas mencapai titik itu sebelum pelaksanaan boleh diteruskan. CyclicBarrier boleh digunakan untuk menyelaraskan pelaksanaan berbilang benang supaya mereka boleh melaksanakan serentak pada titik tertentu. Cara menggunakan CyclicBar

See all articles