দইদুইই মাল্টিথ্রেডিং-এ সিনক্রোনাইজেশনের জন্য ব্যবহৃত হয়।
- CountDownLatch: এক বা একাধিক থ্রেড অন্য থ্রেডগুলোর কাজ শেষ হওয়া পর্যন্ত অপেক্ষা করে। কাউন্ট শুধু কমানো যায় (countDown), রিসেট করা যায় না।
- CyclicBarrier: একসাথে কিছু থ্রেড একটি ব্যারিয়ার পয়েন্টে পৌঁছাতে অপেক্ষা করে। ব্যারিয়ার পূরণ হলে অপশনাল Runnable এক্সিকিউট হয়। রিয়ুজযোগ্য (reset possible)।
| ক্র. নং | বিষয় | CyclicBarrier | CountDownLatch |
|---|---|---|---|
| ১ | উদ্দেশ্য | থ্রেডগুলো একসাথে ব্যারিয়ারে পৌঁছাবে | থ্রেডগুলো অন্যের কাজ শেষ হওয়া পর্যন্ত অপেক্ষা করবে |
| ২ | Runnable কনস্ট্রাক্টরে | হ্যাঁ | না |
| ৩ | কাউন্ট টাইপ | থ্রেডের সংখ্যা | টাস্কের সংখ্যা |
| ৪ | রিসেট/অ্যাডভান্স | নয় (await() ব্লক করে) | হ্যাঁ (countDown() অ্যাডভান্স করে) |
| ৫ | এক্সেপশন হ্যান্ডলিং | একটি থ্রেড ইন্টারাপ্ট হলে সব BrokenBarrierException পায় | শুধু বর্তমান থ্রেড InterruptedException পায় |
CyclicBarrier উদাহরণ
// ৫টি থ্রেড ব্যারিয়ারে পৌঁছালে Runnable এক্সিকিউট হবে
CyclicBarrier barrier = new CyclicBarrier(5, () -> System.out.println("All parties arrived!"));
CountDownLatch উদাহরণ
// ২টি টাস্ক শেষ হওয়া পর্যন্ত মেইন থ্রেড অপেক্ষা করবে
CountDownLatch latch = new CountDownLatch(2);
// প্রতিটি টাস্ক শেষে latch.countDown();
latch.await(); // মেইন থ্রেড ব্লক
System.out.println("Done");