কম্পিউটার

জাভা কনকারেন্সিতে CountDownLatch এবং CyclicBarrier এর মধ্যে পার্থক্য


CountDownLatch এবং CyclicBarrier উভয়ই মাল্টিথ্রেডিং পরিবেশে ব্যবহৃত হয় এবং উভয়ই এর অংশ।

জাভা ডক -

অনুযায়ী

CountDownLatch - একটি সিঙ্ক্রোনাইজেশন সহায়তা যা এক বা একাধিক থ্রেডকে অপেক্ষা করতে দেয় যতক্ষণ না অন্য থ্রেডগুলিতে সঞ্চালিত অপারেশনগুলির একটি সেট সম্পূর্ণ হয়৷

CyclicBarrier - একটি সিঙ্ক্রোনাইজেশন সাহায্য যা থ্রেডের একটি সেটকে একে অপরকে একটি সাধারণ বাধা বিন্দুতে পৌঁছানোর জন্য অপেক্ষা করতে দেয়৷

Sr. না। কী CyclicBarrier কাউন্টডাউনল্যাচ
1
বেসিক
একটি সিঙ্ক্রোনাইজেশন সহায়তা যা একটি সাধারণ বাধা বিন্দুতে পৌঁছানোর জন্য একে অপরের জন্য অপেক্ষা করার জন্য থ্রেডের একটি সেটকে অনুমতি দেয়।


একটি সিঙ্ক্রোনাইজেশন সহায়তা যা এক বা একাধিক থ্রেডকে অপেক্ষা করতে দেয় যতক্ষণ না অন্য থ্রেডগুলিতে সঞ্চালিত অপারেশনগুলির একটি সেট সম্পূর্ণ হয়।


2
Runable
এটির একটি কনস্ট্রাক্টর রয়েছে যেখানে রানেবল প্রদান করা যেতে পারে।
এতে এমন কনস্ট্রাক্টর নেই
3
থ্রেড /টাস্ক
এটি থ্রেডের সংখ্যা বজায় রাখে
এটি কাজের গণনা বজায় রাখে
4.
একটি অগ্রসরযোগ্য
এটি অগ্রসরযোগ্য নয়
এটি অগ্রসরযোগ্য।
5
ব্যতিক্রম৷
অপেক্ষা করার সময় যদি একটি থ্রেড বাধাপ্রাপ্ত হয় তাহলে অন্য সব ওয়েটিং থ্রেড B rokenBarrierException নিক্ষেপ করবে
শুধুমাত্র বর্তমান থ্রেড নিক্ষেপ করবে
বাধাপ্রাপ্ত ব্যতিক্রম। এটি অন্যান্য থ্রেড প্রভাবিত করবে না

সাইক্লিক ব্যারিয়ারের উদাহরণ

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();
         }
      }
   }
}

কাউন্টডাউনল্যাচের উদাহরণ

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());
   }
}

  1. জাভাতে ব্যতিক্রম এবং ত্রুটির মধ্যে পার্থক্য

  2. জাভাতে সিরিয়ালাইজেশন এবং এক্সটারনালাইজেশনের মধ্যে পার্থক্য

  3. জাভাতে ইটারেটর এবং গণনার মধ্যে পার্থক্য

  4. জাভাতে অ্যারেলিস্ট এবং হ্যাশসেটের মধ্যে পার্থক্য