Java-da inter mövzu


Rabitə Java SapBaxılıb 39

Java-da inter mövzu

Java-da və ya əməkdaşlıq sinxronizasiya olunmuş ünsiyyətin əlaqələndirilməsi prosesidir mövzuları. Bu o deməkdir ki, yeni bir mövzu kritik hissəyə daxil olmaq istədikdə, yeni iş parçasına icazə vermək üçün hazırda icra olunan ipliyi dayandırır. Bu şəkildə, sinxronlaşdırılmış iplər bir-biri ilə iş birliyi edərsə, çıxılmaz vəziyyət riskini azaldır. Objekt sinifinin wait, notify və notifyAll metodlarından istifadə edərək mövzuarası ünsiyyəti həyata keçirə bilərik.

İndi hər bir metodu aşağıda ətraflı şəkildə nəzərdən keçirək.

gözləmə metodu

Wait () metodu cari mövzu icrasını dayandırır və vaxt keçdikcə gözləyir və ya başqa bir mövzu notify () və ya notifyAll () metodunu çağırır.

Wait () metoduna yalnız daxilində müraciət edə bilərik sinxronizasiya olunmuş metod və ya sinxronizasiya edilmiş blok, çünki iplik monitora sahib olmalıdır, əks halda istisna verəcəkdir. Wait () metodunu çağırdıqdan sonra mövcud kilid monitorunu buraxır.

public final void wait(long milliseconds) throws InterruptedException

Monitor nədir

Sinxronlaşdırılmış bir mövzu paylaşılan bir mənbəyə daxil olmaq istədikdə, bir kilid əldə edir və monitora daxil olur. Bir anda yalnız bir mövzu monitora sahib ola bilər. Digər mövzuların, ilk mövzu monitoru buraxana qədər gözləmək lazımdır.

metodu bildir

Bildiriş metodu eyni mənbədə gözləmə metodunu çağıran ipi oyandırır. Bu, yuxuda olan ipin icrasını davam etdirməsinə səbəb olur. Eyni paylaşılan mənbənin gözləmə vəziyyətində çox sayda mövzu varsa, bunlardan heç birini xəbərdar edir.

public final void notify()

bütün metod

NotifyAll metodu eyni mənbədə gözləmə metodunu çağıran bütün mövzuları oyadır. Birdən çox iplik varsa, ən yüksək yuxudan oyanır prioritet mövzu.

public final void notifyAll()

Java-da mövzuarası rabitə nümunəsi

Aşağıda java-da gözləmə, bildiriş və notifyAll metodlarından istifadə edərək mövzudaxili rabitəni necə tətbiq edəcəyinizi anlamağa kömək edən bir nümunə var.

class Stock {
  int qty = 15;
  
  synchronized void purchaseStock(int quantity) {
    System.out.println("Purchase stock");
    
    if(this.qty < quantity) {
      System.out.println("Insufficient quantity available");
      try {
        wait();
      }
      catch(Exception e) {
        e.printStackTrace();
      }
    }
    this.qty = this.qty - quantity;
    System.out.println("Purchase stock completed");
  }
  
  synchronized void addStock(int quantity) {
    System.out.println("Adding Product stock");
    
    this.qty = this.qty + quantity;
    System.out.println("Add stock completed");
    notify();
    
  }
}
public class InterThreadDemo {

  public static void main(String[] args) {
    Stock s = new Stock();
    new Thread() {
      public void run() {
        s.purchaseStock(20);
      }
    }.start();
    

    new Thread() {
      public void run() {
        s.addStock(10);
      }
    }.start();
  }

}
Purchase stock
Insufficient quantity available
Adding Product stock
Add stock completed
Purchase stock completed

Yuxarıdakı nümunəni ətraflı başa düşək.

İlk mövzu zəng etdikdə purchaseStock() üsulu ilə kilidi əldə edir və stokda lazımlı miqdarın olub olmadığını yoxlayır. Tələb olunan miqdar (20 olan) mövcud miqdardan (15-dən) az olduğundan, çağırır wait() metodu.

İndi kilidi buraxır və ilk iplik gözləmə vəziyyətində olduğundan ikinci ipliyi başlayır. İkinci mövzu mövcud stoka lazımi miqdarda əlavə edən və sonra çağıran addStock () metodunu çağırır notify() metod. The notify() üsulu çağıran ilk ipi oyandırır wait() metod və icrasını davam etdirir.

İndi tələb olunan stok mövcud olduğu üçün tələb olunan miqdar azalır və mövcud stoku yeniləyir və icrası tamamlayır.

Java-da inter mövzuPin

Gözləmə və yuxu arasındakı fərq

Gözləmə və yuxu metodları az və ya çox eyni əməliyyatı həyata keçirsə də, aşağıdakı kimi bəzi fərqlər var.

gözləməkyatmaq
Obyekt sinfinə aiddirMövzu sinifinə aiddir
Statik olmayan bir üsuldurStatik bir üsuldur
Gözləmə əməliyyatı bildirmək və ya bildirmək üçün bütün metodlarla dayandırılırYuxu əməliyyatı müəyyən bir fasilədən sonra kəsilir
Gözləmə metodu çağırıldıqda kilidi buraxırHeç bir kilidi buraxmır və ya sahibi deyil

arayış

Şərh yaz

Translate »
1