काउंटडाउनलैच और साइक्लिकबैरियर दोनों का उपयोग मल्टीथ्रेडिंग वातावरण में किया जाता है और वे दोनों इसका हिस्सा हैं।
Java Doc के अनुसार -
काउंटडाउनलैच - एक सिंक्रोनाइज़ेशन सहायता जो एक या एक से अधिक थ्रेड्स को तब तक प्रतीक्षा करने की अनुमति देती है जब तक कि अन्य थ्रेड्स में किए जा रहे ऑपरेशन का एक सेट पूरा नहीं हो जाता।
CyclicBarrier - एक सिंक्रोनाइज़ेशन सहायता जो थ्रेड्स के एक सेट को एक दूसरे के लिए एक सामान्य बाधा बिंदु तक पहुँचने की प्रतीक्षा करने की अनुमति देती है।
Sr. नहीं. | <वें शैली ="चौड़ाई:7.7551%; पाठ-संरेखण:केंद्र;">कुंजी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()); } }