Java-da ArrayBlockingQueue


ArrayBlockingQueue Java Çox oxluBaxılıb 97

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.

Java-da ArrayBlockingQueue

ArrayBlockingQueue, Java-da BlockingQueue interfeysini tətbiq edən bir sinifdir. Elementləri daxili olaraq bir sıra şəklində saxlayan məhdud bir BlockingQueue'dur. Beləliklə FIFO konsepsiya (First In First Out), ilk əlavə etdiyimiz elementin əvvəl alınacağı anlamına gəlir. Rəhbəri queue növbədəki uzun müddət qalan elementdir, növbənin quyruğu isə qısa müddətə qalan elementi ehtiva edir.

ArrayBlockingQueue bir BlockingQueue funksiyasını həyata keçirir. Bu o deməkdir ki, növbənin tutumu yoxdursa, yerləşdirmə əməliyyatı zamanı ipliyi bloklayır. Elementləri əlavə etmək üçün növbədə bəzi boş yerlər olana qədər gözləyir. Eynilə, növbə boş olduqda bir elementi silməyə çalışdığımızda bir mövzuya mane olur. Növbədən götürmək üçün bir element olana qədər gözləyir.

Eyni bir nümunə yaradarkən ArrayBlockingQueue-un tutumunu təyin edə bilərik.

Hiyerarşi

Java-da ArrayBlockingQueue

ArrayBlockingQueue qurucuları

Aşağıda Java-da ArrayBlockingQueue sinifinin konstruktorları verilmişdir:

konstruktortəsvirSinatx
ArrayBlockingQueueMüəyyən edilmiş tutuma malik ArrayBlockingQueue yaradırArrayBlockingQueue aq = yeni ArrayBlockingQueue (int tutumu);
ArrayBlockingQueue (int tutumu, boolean sərgi)Müəyyən edilmiş tutum və giriş qaydası ilə ArrayBlockingQueue yaradırArrayBlockingQueue aq = yeni ArrayBlockingQueue (int tutumu, boolean sərgi);
ArrayBlockingQueue (int tutumu, boolean sərgi, Collection c)Müəyyən edilmiş tutumu, giriş qaydası və göstərilən kolleksiyada elementləri olan ArrayBlockingQueue yaradırArrayBlockingQueue aq = yeni ArrayBlockingQueue (int tutumu, boolean sərgi, Collection c);

Java ArrayBlockingQueue metodları

Aşağıda Java-da ArrayBlockingQueue sinifinin metodları verilmişdir:

metodikatəsvir
boolean əlavə et (Element e)Sıra bir element əlavə edir
boşluq təmiz ()Növbədəki bütün elementləri silməklə növbəni təmizləyir
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
void forEach (İstehlakçı hərəkəti)Növbədəki hər bir element üçün göstərilən əməliyyatı həyata keçirir.
Təkrarlayıcı iterator ()Növbədəki elementlərin üzərinə təkrarlayıcı qaytarır
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
Element peek ()Sıradakı baş elementi qaytarır
Element 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ə qoymaq (Element 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
boolean removeAll (Collection c)Növbədəki bütün kolleksiya elementlərini silir
boolean retainAll (Kolleksiya c)Növbədəki bütün toplama elementlərini saxlayır və digər elementləri silir
int ölçüsü ()Növbənin ölçüsünü qaytarır
Spliterator spliterator ()Elementlər üzərində bir ayırıcı qaytarır
Tamsayı götür ()Növbənin başını götürür və götürür

Misal: Elementləri daxil edin

Aşağıdakı nümunə istifadə edərək ArrayBlockingQueue-a elementləri necə əlavə edəcəyimizi göstərir add(), offer()put() metodlar. Budur, BlcokingQueue-nu 5-ə uyğunlaşdırdıq. Buna görə yalnız 5 element əlavə edə bilərik, əgər 6-cı elementi əlavə etməyə çalışsaq, boşluq olana qədər növbəni bloklayır.

import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;

public class ArrayBlockingQueueDemo {

  public static void main(String[] args) throws InterruptedException {
    ArrayBlockingQueue<String> bq = new ArrayBlockingQueue<String>(5);
    bq.add("Red");
    bq.add("Green");
    bq.add("Blue");
    
    System.out.println(bq);
    
    bq.offer("Yellow");
    System.out.println(bq);
    
    bq.put("Orange");
    System.out.println(bq);
  }

}
[Red, Green, Blue]
[Red, Green, Blue, Yellow]
[Red, Green, Blue, Yellow, Orange]

Misal: Elementləri silin

Bu nümunə elementləri kuyruğundan istifadə edərək necə silinəcəyini göstərir remove(), poll()take() metodlar. The poll()take() baş elementini növbədən çıxarır.

import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;

public class ArrayBlockingQueueDemo {

  public static void main(String[] args) throws InterruptedException {
    ArrayBlockingQueue<String> bq = new ArrayBlockingQueue<String>(5);
    System.out.println("Inserting elements...");
    bq.add("Red");
    bq.add("Green");
    bq.add("Blue");
    
    System.out.println(bq);
  
    bq.offer("Yellow");
    System.out.println(bq);
    
    bq.put("Orange");
    System.out.println(bq);
    
    System.out.println("Removing elements...");
    bq.remove("Yellow");
    System.out.println(bq);
    
    bq.poll();
    System.out.println(bq);
    
    bq.take();
    System.out.println(bq);
  }

}
Inserting elements...
[Red, Green, Blue]
[Red, Green, Blue, Yellow]
[Red, Green, Blue, Yellow, Orange]
Removing elements...
[Red, Green, Blue, Orange]
[Green, Blue, Orange]
[Blue, Orange]

Nümunə: Giriş elementləri

Bu nümunə. Elementini istifadə edərək baş elementinin necə alınacağını göstərir element()peek() metod. Bu üsullar yalnız dəyərləri alacaq və onları növbədən çıxarmır. İstifadə edə bilərik retainAll() yalnız toplama elementlərini qorumaq və digər elementləri silmək üsulu.

import java.util.concurrent.ArrayBlockingQueue;

public class AccessArrayBQ {

  public static void main(String[] args) {
    ArrayBlockingQueue<String> bq = new ArrayBlockingQueue<String>(10);
  
    bq.add("Red");
    bq.add("Green");
    bq.add("Blue");
    bq.add("Yellow");
    bq.add("Orange");
    
    System.out.println("Element method output: " + bq.element());
    System.out.println("Peek method output: " + bq.peek());
    
    ArrayBlockingQueue<String> c = new ArrayBlockingQueue<String>(2);
    c.add("Black");
    c.add("Brown");
    bq.addAll(c);
    System.out.println("Elements in Queue after addAll: " + bq);
    
    bq.retainAll(c);
    System.out.println("RetainAll output: " + bq);
  }

}
Element method output: Red
Peek method output: Red
Elements in Queue after addAll: [Red, Green, Blue, Yellow, Orange, Black, Brown]
RetainAll output: [Black, Brown]

Misal: elementləri təkrarlamaq

Aşağıdakı nümunədə iterate() növbədəki bütün elementlərdən keçmək üçün təkrarlayıcı üsulu. İstifadə edir next() növbəti elementə getmək üçün metod.

import java.util.Iterator;
import java.util.concurrent.ArrayBlockingQueue;

public class AccessArrayBQ {

  public static void main(String[] args) {
    ArrayBlockingQueue<String> bq = new ArrayBlockingQueue<String>(10);
  
    bq.add("Red");
    bq.add("Green");
    bq.add("Blue");
    bq.add("Yellow");
    bq.add("Orange");
    
    Iterator<String> it = bq.iterator();
    while(it.hasNext())
      System.out.println(it.next());
    
  }

}
Red
Green
Blue
Yellow
Orange

 

arayış

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