logo

CountDownLatch في جافا

يتم استخدام CountDownLatch للتأكد من أن المهمة تنتظر سلاسل رسائل أخرى قبل أن تبدأ. لفهم تطبيقه، دعونا نفكر في خادم حيث لا يمكن أن تبدأ المهمة الرئيسية إلا عند بدء جميع الخدمات المطلوبة. عمل CountDownLatch: عندما نقوم بإنشاء كائن CountDownLatch، نحدد عدد سلاسل الرسائل التي يجب أن ينتظرها حتى يتم العد التنازلي لجميع هذه الخيوط عن طريق استدعاء CountDownLatch.countDown() بمجرد اكتمالها أو استعدادها للمهمة. بمجرد وصول العدد إلى الصفر، تبدأ مهمة الانتظار قيد التشغيل. مثال على CountDownLatch في JAVA: Java
// Java Program to demonstrate how  // to use CountDownLatch Its used  // when a thread needs to wait for other  // threads before starting its work. import java.util.concurrent.CountDownLatch; public class CountDownLatchDemo {  public static void main(String args[])   throws InterruptedException  {  // Let us create task that is going to   // wait for four threads before it starts  CountDownLatch latch = new CountDownLatch(4);  // Let us create four worker   // threads and start them.  Worker first = new Worker(1000 latch   'WORKER-1');  Worker second = new Worker(2000 latch   'WORKER-2');  Worker third = new Worker(3000 latch   'WORKER-3');  Worker fourth = new Worker(4000 latch   'WORKER-4');  first.start();  second.start();  third.start();  fourth.start();  // The main task waits for four threads  latch.await();  // Main thread has started  System.out.println(Thread.currentThread().getName() +  ' has finished');  } } // A class to represent threads for which // the main thread waits. class Worker extends Thread {  private int delay;  private CountDownLatch latch;  public Worker(int delay CountDownLatch latch  String name)  {  super(name);  this.delay = delay;  this.latch = latch;  }  @Override  public void run()  {  try  {  Thread.sleep(delay);  latch.countDown();  System.out.println(Thread.currentThread().getName()  + ' finished');  }  catch (InterruptedException e)  {  e.printStackTrace();  }  } } 
الإخراج:
WORKER-1 finished WORKER-2 finished WORKER-3 finished WORKER-4 finished main has finished 
حقائق عن CountDownLatch:
  1. إن إنشاء كائن CountDownLatch عن طريق تمرير int إلى منشئه (العدد) هو في الواقع عدد الأطراف المدعوة (المواضيع) لحدث ما.
  2. ينتظر مؤشر الترابط الذي يعتمد على سلاسل رسائل أخرى لبدء المعالجة حتى يقوم كل مؤشر ترابط آخر باستدعاء العد التنازلي. جميع سلاسل الرسائل التي تنتظر الانتظار () تتابع معًا بمجرد وصول العد التنازلي إلى الصفر.
  3. تعمل طريقة countDown() على تقليل عدد كتل طريقة count وانتظار() حتى يصبح العد == 0