Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> Java

जावा कंसुरेंसी में काउंटडाउनचैच और साइक्लिक बैरियर के बीच अंतर

काउंटडाउनलैच और साइक्लिकबैरियर दोनों का उपयोग मल्टीथ्रेडिंग वातावरण में किया जाता है और वे दोनों इसका हिस्सा हैं।

Java Doc के अनुसार -

काउंटडाउनलैच - एक सिंक्रोनाइज़ेशन सहायता जो एक या एक से अधिक थ्रेड्स को तब तक प्रतीक्षा करने की अनुमति देती है जब तक कि अन्य थ्रेड्स में किए जा रहे ऑपरेशन का एक सेट पूरा नहीं हो जाता।

CyclicBarrier - एक सिंक्रोनाइज़ेशन सहायता जो थ्रेड्स के एक सेट को एक दूसरे के लिए एक सामान्य बाधा बिंदु तक पहुँचने की प्रतीक्षा करने की अनुमति देती है।

<वें शैली ="चौड़ाई:7.7551%; पाठ-संरेखण:केंद्र;">कुंजी
Sr. नहीं. CyclicBarrier CountDownLatch
1
मूलभूत
एक सिंक्रोनाइज़ेशन सहायता जो थ्रेड्स के एक सेट को एक दूसरे के लिए एक सामान्य बाधा बिंदु तक पहुँचने की प्रतीक्षा करने की अनुमति देती है।


एक सिंक्रनाइज़ेशन सहायता जो एक या अधिक थ्रेड्स को तब तक प्रतीक्षा करने की अनुमति देती है जब तक कि अन्य थ्रेड्स में किए जा रहे संचालन का एक सेट पूरा नहीं हो जाता।


2
चलाने योग्य
इसमें एक कंस्ट्रक्टर है जहां रननेबल प्रदान किया जा सकता है।
इसमें ऐसा कंस्ट्रक्टर नहीं है
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. जावा में सीरियलाइज़ेशन और एक्सटर्नलाइज़ेशन के बीच अंतर

    सीरियलाइज़ेशन और एक्सटर्नलाइज़ेशन दोनों किसी ऑब्जेक्ट को स्ट्रीम बाइट में बदलने और डेटाबेस या मेमोरी में बाइट स्ट्रीम को स्टोर करने की प्रक्रियाएँ हैं। java.io.Serializable इंटरफ़ेस को लागू करने वाले वर्ग को क्रमबद्ध किया जा सकता है। दूसरी ओर, आवेदन में आवश्यकता के आधार पर कस्टम क्रमांकन के लिए उपयो

  1. जावा में इटरेटर और एन्यूमरेशन के बीच अंतर

    इटरेटर और एन्यूमरेशन दोनों ही संग्रह से किसी तत्व को पार करने और एक्सेस करने के लिए कर्सर हैं। वे दोनों संग्रह ढांचे से संबंधित हैं। संग्रह ढांचे में JDK1.0 और Iterator में JDK.1.2 संस्करण में गणना जोड़ी गई थी। एन्यूमरेशन संग्रह में संरचनात्मक परिवर्तन नहीं कर सकता क्योंकि इसमें संग्रह में तत्व तक

  1. जावा में ऐरेलिस्ट और हैशसेट के बीच अंतर

    हैशसेट और ऐरेलिस्ट दोनों ही जावा संग्रह ढांचे के कुछ सबसे महत्वपूर्ण वर्ग हैं। ArrayList और हैशसेट के बीच महत्वपूर्ण अंतर निम्नलिखित हैं। सीनियर। नहीं. कुंजी ऐरेलिस्ट हैशसेट 1 कार्यान्वयन ArrayList सूची इंटरफ़ेस का कार्यान्वयन है। दूसरी ओर हैशसेट एक सेट इंटरफ़ेस का कार्यान्वयन है। 2 आंतरिक क