Java-da Sinxron Sual


Java Çox oxlu Sinxron SualBaxılıb 85

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əlimat Java-dakı SynchrnousQueue, qurucuları və metodları ilə yanaşı Java-dakı SynchronousQueue nümunəsini də anlamağa kömək edəcəkdir.

Java-da Sinxron Sual

Java-dakı SynchronousQueue, BlockingQueue interfeysini tətbiq edən bir sinifdir. Adından da göründüyü kimi daxil etmə və silmə əməliyyatları arasında sinxronizasiya təmin edir. Bu, istifadə edərək bir element daxil etdiyimiz zaman deməkdir put() metod, bu metodu bir başqasına qədər bloklayır sap istifadə edərək onu alır take() metod. Bənzər bir şəkildə, silmə əməliyyatı zamanı növbədə bir element olmadığı zaman, bloklaşdırır take() çağıranadək metod put() metod. Ən yaxşı real vaxt nümunəsi, yalnız maşında və ya hesabda bir qədər pul qoyulduğu təqdirdə pul ala biləcəyimiz bankomat maşını və ya bank hesabıdır.

Java-da Sinxron Sual

İnşaatçılar

Aşağıda inşaatçılar Java-dakı SynchronousQueue sinifinin:

  • SynchronusQueue (): Boş bir Sinxron Sual yaradır.
  • SynchronousQueue (boolean yarmarkası): Parametr doğrudursa, FIFO-nu izləyən boş bir SynchronousQueue yaradır. Parametr yanlışdırsa, heç bir icra qaydasına zəmanət vermir.
SynchronousQueue<Integer> sq = new SynchronousQueue<Integer>();

SynchronousQueue<Integer> sq = new SynchronousQueue<Integer>(boolean fair);

metodika

Aşağıda Java-da SynchronousQueue sinifində mövcud olan metodlar verilmişdir. Ayrıca BlockingQueue, Collection, və AbstractQueue və Queue interfeysləri.

metodikatəsvir
boolean əlavə (Tamsayı e)Sıra bir element əlavə edir
boolean tərkibində (Object o) varSırada göstərilən element varsa, doğru qaytarır
int drainTo (Koleksiyon c)Bütün elementləri növbədən çıxarır və göstərilən kolleksiyaya aparır. Aktarılan elementlərin sayını qaytarır
int drainTo (Collection c, int maxElements)Maksimum element sayını növbədən çıxarır və göstərilən kolleksiyaya əlavə edir
boolean təklif (Tam e)Göstərilən elementi daxil edir
boolean təklif (Tamsayı e, uzun fasilə, TimeUnit vaxt birliyi)Yer olmadığı təqdirdə göstərilən vaxtı gözlədikdən sonra göstərilən elementi növbəyə əlavə edir
Tamsayı anket (uzun fasilə, TimeUnit vaxt birliyi)Müəyyən vaxtı gözlədikdən sonra elementin başını götürür və çıxarır
boş yerə qoyun (Tamsayı e)Göstərilən elementi növbəyə əlavə edir
int qalanCapacity ()Növbəni bloklamadan qəbul edə biləcəyi element sayını qaytarır
boolean sil (Object e)Göstərilən elementi növbədən çıxarır
Tamsayı götür ()Növbənin başını götürür və götürür

SynchronousQueue tətbiq edilməsinin əsas metodları bunlardır put()take() yerləşdirmə və silmə əməliyyatlarını təmsil edən.

Sinxron Sual Nümunəsi: elementləri daxil edin və silin

Aşağıdakı kodda. Elementlərindən necə istifadə ediləcəyi göstərilir put() metodu.

try {
     sq.put(100);
}
catch(InterruptedException e) {
     e.printStackTrace();
}

Aşağıdakı kod,. İstifadə edərək elementlərin necə alınacağını göstərir take() metodu.

try {
  System.out.println(sq.take());
}
catch(InterruptedException e) {
  e.printStackTrace();
}

Java SynchronousQueue: İstehsalçı istehlakçı nümunəsi

Aşağıda Java-da SynchronousQueue istifadə edərək bir elementin daxil edilməsi və çıxarılması üçün İstehsalçı istehlakçı nümunəsidir. 2 mövzu yaradırıq, 1 istifadə edərək bir element əlavə edən İstehsalçı ipidir put() metod. Digəri, istifadə edərək elementi götürən və çıxaran istehlakçı ipidir take() metod. Bir dəfə put() üsulu, başqa bir mövzu çağırana qədər istehsalçı ipi bloklanır take() metodu.

import java.util.concurrent.SynchronousQueue;

public class SynchronousQueueDemo {

  public static void main(String[] args) {
    SynchronousQueue<Integer> sq = new SynchronousQueue<Integer>();
    
    Thread p = new Thread("Producer") {
      public void run() {
        int value = 10;
        try {
          sq.put(value);
          System.out.println("Thread " + Thread.currentThread().getName() + " started");
          System.out.println("Producer value: " + value);
        }
        catch(InterruptedException e) {
          e.printStackTrace();
        }
      }
    };
    
    Thread c = new Thread("Consumer" ) {
      public void run() {
        int value = 20;
        try {
          sq.take();
          System.out.println("Thread " + Thread.currentThread().getName() + " started");
          System.out.println("Consumer value: " + value);
        }
        catch(Exception e) {
          e.printStackTrace();
        }
      }
    };
    
    p.start();
    c.start();
  }

}
Thread Producer started
Producer value: 10
Thread Consumer started
Consumer value: 20

 

arayış

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