Java-da CountDownLatch


CountdownLatch Java Çox oxluBaxılıb 87

Sistem dizaynı ilə bağlı müsahibə sualları o qədər açıq ola bilər ki, düzgün hazırlaşmağı bilmək çox çətindir. İndi satın aldıqdan sonra Amazon, Microsoft və Adobe-nin dizayn dövrlərini sındıra bilirəm Bu kitabı. Gündəlik bir yenidən nəzərdən keçirin dizayn sualı və söz verirəm ki, dizayn dövrünü sındıra bilərsiniz.

Bu təlimatda, Java-da CountDownLatch-ı, onun metodlarını, CountDownLatch-ın necə işlədiyini bir nümunə ilə müzakirə edəcəyik.

Java-da CountDownLatch

CountDownLatch, bütün mövzuları bəzi məcburi əməliyyat tamamlanana qədər gözləməyə məcbur edən Java Concurrency yardım proqramlarından biridir. Xüsusi ilə başlanğıc verən bir sinxronizasiya texnikasıdır sap saymaq. Hər dəfə countDown() üsul, bu say azalır. Həm də iplik hər dəfə icrasını tamamladıqda sayğac azalır. Sayı 0-a çatdıqda, bu, bütün mövzuların icrasını tamamladığını göstərir. The await() metod, sayma 0-a çatana qədər əsas iplik icrasını bloklayır.

Java CountDownLatch metodları

Aşağıda Java-da CountDownLatch-da mövcud olan metodlar verilmişdir

Üsultəsvir
boşluq gözləyir ()Cari ipin geri sayma 0-a çatana qədər gözləməsinə səbəb olur.
boolean gözləyir (uzun fasilə, TimeUnit vaxt birliyi)Cari ipin geri sayma 0-a çatana qədər və ya vaxt keçməsinə qədər gözləməsinə səbəb olur
etibarsız countDown ()Mandalı sayını azaldır.
long getCount ()Cari sayını qaytarır
String toString ()Mandalın String təmsilini qaytarır

Java CountDownLatch-in işlənməsi

CountDownLatch sinifində mövzu sayını başlatan yalnız 1 konstruktor var. Bu, yerinə yetiriləcək və mandalı gözləyən iplərin sayını göstərir. Əsas mövzu await() ipləri işə saldıqdan dərhal sonra metod. Bu, bütün ipliklərin yerinə yetirilməsini və mandal sayının 0-a çatmasına qədər əsas ipin gözləməsi deməkdir. Bir iplik yerinə yetirildikdə hər dəfə mandal sayı 1 azalır. Sayı 0 olduqda, əsas mövzu yenidən icrasına davam edir.

CountDownLatch Tətbiqləri

Aşağıdakı ssenarilərdə CountDownLatch istifadə edə bilərik:

  • Eyni zamanda birdən çox mövzu icra edərək paralelliyə nail olun.
  • Əsas mövzu icrasına başlamazdan əvvəl müəyyən bir icrasının tamamlanmasını gözləyin
  • Çıxmazdan qorunma

CountDownLatch Nümunəsi

Aşağıda bir CountDownLatch-ın Java-da işlədiyini göstərmək üçün bir nümunə var. Bu nümunədə 3 sapla bir mandal yaradırıq. Tapşırıq sinfi üçün 3 yeni mövzu yaradırıq və istifadə edərək onları icra edirik start() metod. Tapşırıq sinfi a olan Runnable interfeysini tətbiq edir run() metod. Bu metod həqiqi mövzu icrasına malikdir. Bir iplik icrasını tamamladıqda, istifadə edərək mandal sayını azaldır countDown() metod. Əsas metoddakı ifadənin yalnız bütün mövzuların icrası tamamlandıqdan sonra icra olunduğunu görə bilərik. Bunun səbəbi await() mövzuya başladıqdan sonra metod. The await() metod əsas metodun icrasını yalnız bütün mövzuların icrasını tamamladıqdan sonra davam etdirməsini təmin edir.

import java.util.concurrent.CountDownLatch;

public class CountDownLatchDemo {

  public static void main(String[] args) {
    CountDownLatch cd = new CountDownLatch(3);
    
    Thread t1 = new Thread(new Task("Task1", cd));
    Thread t2 = new Thread(new Task("Task2", cd));
    Thread t3 = new Thread(new Task("Task3", cd));
    
    t1.start();
    t2.start();
    t3.start();
    
    try {
      cd.await();
      System.out.println("All tasks are executing...");
    }
    catch(InterruptedException e) {
      e.printStackTrace();
    }

  }

}

class Task implements Runnable {

  private CountDownLatch cl;
  private String name;
  
  Task(String name, CountDownLatch cl){
    this.name = name;
    this.cl = cl;
  }
  
  @Override
  public void run() {
    try {
      System.out.println("Start " + name);
      Thread.sleep(1000);
    }
    catch(InterruptedException e) {
      e.printStackTrace();
    }
    System.out.println("Executing " + name);
    cl.countDown();
    
  }
  
}
Start Task1
Start Task3
Start Task2
Executing Task1
Executing Task3
Executing Task2
All tasks are executing...

 

arayış

Crack Sistemi Dizayn Müsahibələri
Translate »