Manufaktur industri
Industri Internet of Things | bahan industri | Pemeliharaan dan Perbaikan Peralatan | Pemrograman industri |
home  MfgRobots >> Manufaktur industri >  >> Industrial programming >> java

Java LinkedBlockingQueue

Java LinkedBlockingQueue

Dalam tutorial ini, kita akan belajar tentang kelas LinkedBLockingQueue dan metodenya dengan bantuan contoh.

LinkedBlockingQueue kelas Java Collections framework menyediakan implementasi antrian pemblokiran menggunakan daftar tertaut.

Ini mengimplementasikan antarmuka Java BlockingQueue.


Membuat LinkedBlockingQueue

Untuk membuat antrian pemblokiran tertaut, kita harus mengimpor java.util.concurrent.LinkedBlockingQueue paket.

Berikut ini cara membuat antrean pemblokiran tertaut di Java:

1. Tanpa kapasitas awal

LinkedBlockingQueue<Type> animal = new LinkedBlockingQueue<>();

Di sini kapasitas awal default adalah 2 31 -1.

2. Dengan kapasitas awal

LinkedBlockingQueue<Type> animal = new LinkedBlockingQueue<>(int capacity);

Di sini,

Misalnya,

// Creating String type LinkedBlockingQueue with size 5
LinkedBlockingQueue<String> animals = new LinkedBlockingQueue<>(5);

// Creating Integer type LinkedBlockingQueue with size 5
LinkedBlockingQueue<Integer> age = new LinkedBlockingQueue<>(5);

Catatan: Tidak wajib untuk memberikan ukuran daftar tertaut.


Metode LinkedBlockingQueue

LinkedBlockingQueue class menyediakan implementasi semua metode di antarmuka BlockingQueue.

Metode ini digunakan untuk menyisipkan, mengakses, dan menghapus elemen dari antrean pemblokiran yang ditautkan.

Juga, kita akan belajar tentang dua metode put() dan take() yang mendukung operasi pemblokiran dalam antrean pemblokiran tertaut.

Kedua metode ini membedakan antrean pemblokiran tertaut dari antrean umum lainnya.


Sisipkan Elemen

Misalnya,

import java.util.concurrent.LinkedBlockingQueue;

class Main {
    public static void main(String[] args) {
        LinkedBlockingQueue<String> animals = new LinkedBlockingQueue<>(5);

        // Using add()
        animals.add("Dog");
        animals.add("Cat");

        // Using offer()
        animals.offer("Horse");
        System.out.println("LinkedBlockingQueue: " + animals);
    }
}

Keluaran

LinkedBlockingQueue: [Dog, Cat, Horse]

Elemen Akses

Misalnya,

import java.util.concurrent.LinkedBlockingQueue;
import java.util.Iterator;

class Main {
    public static void main(String[] args) {
        LinkedBlockingQueue<String> animals = new LinkedBlockingQueue<>(5);

        // Add elements
        animals.add("Dog");
        animals.add("Cat");
        animals.add("Horse");
        System.out.println("LinkedBlockingQueue: " + animals);

        // Using peek()
        String element = animals.peek();
        System.out.println("Accessed Element: " + element);

        // Using iterator()
        Iterator<String> iterate = animals.iterator();
        System.out.print("LinkedBlockingQueue Elements: ");

        while(iterate.hasNext()) {
            System.out.print(iterate.next());
            System.out.print(", ");
        }
    }
}

Keluaran

LinkedBlockingQueue: [Dog, Cat, Horse]
Accessed Element: Dog
LinkedBlockingQueue Elements: Dog, Cat, Horse,

Hapus Elemen

Misalnya,

import java.util.concurrent.LinkedBlockingQueue;

class Main {
    public static void main(String[] args) {
        LinkedBlockingQueue<String> animals = new LinkedBlockingQueue<>(5);

        animals.add("Dog");
        animals.add("Cat");
        animals.add("Horse");
        System.out.println("LinkedBlockingQueue " + animals);

        // Using remove()
        String element1 = animals.remove();
        System.out.println("Removed Element:");
        System.out.println("Using remove(): " + element1);

        // Using poll()
        String element2 = animals.poll();
        System.out.println("Using poll(): " + element2);

        // Using clear()
        animals.clear();
        System.out.println("Updated LinkedBlockingQueue " + animals);
    }
}

Keluaran

LinkedBlockingQueue: [Dog, Cat, Horse]
Removed Elements:
Using remove(): Dog
Using poll(): Cat
Updated LinkedBlockingQueue: []

put() dan take() Metode

Dalam proses multithreading, kita dapat menggunakan put() dan take() untuk memblokir pengoperasian satu utas untuk menyinkronkannya dengan utas lainnya. Metode ini akan menunggu hingga berhasil dieksekusi.


Metode put()

Untuk menyisipkan elemen yang ditentukan ke akhir antrian pemblokiran yang ditautkan, kami menggunakan put() metode.

Jika antrean pemblokiran tertaut penuh, ia akan menunggu hingga ada ruang dalam antrean pemblokiran tertaut untuk memasukkan elemen.

Misalnya,

import java.util.concurrent.LinkedBlockingQueue;

class Main {
    public static void main(String[] args) {
        LinkedBlockingQueue<String> animals = new LinkedBlockingQueue<>(5);

       try {
        // Add elements to animals
           animals.put("Dog");
           animals.put("Cat");
           System.out.println("LinkedBlockingQueue: " + animals);
        }
        catch(Exception e) {
            System.out.println(e);
        }
    }
}

Keluaran

LinkedBlockingQueue: [Dog, Cat]

Di sini, put() metode mungkin melempar InterruptedException jika terganggu saat menunggu. Oleh karena itu, kita harus menyertakannya di dalam blok try..catch.


ambil() Metode

Untuk mengembalikan dan menghapus elemen dari depan antrian pemblokiran yang ditautkan, kita dapat menggunakan take() metode.

Jika antrean pemblokiran tertaut kosong, ia akan menunggu hingga ada elemen dalam antrean pemblokiran tertaut yang akan dihapus.

Misalnya,

import java.util.concurrent.LinkedBlockingQueue;

class Main {
    public static void main(String[] args) {
        LinkedBlockingQueue<String> animals = new LinkedBlockingQueue<>(5);

       try {
           //Add elements to animals
           animals.put("Dog");
           animals.put("Cat");
           System.out.println("LinkedBlockingQueue: " + animals);

           // Remove an element
           String element = animals.take();
           System.out.println("Removed Element: " + element);
           System.out.println("New LinkedBlockingQueue: " + animals);
        }
        catch(Exception e) {
            System.out.println(e);
        }
    }
}

Keluaran

LinkedBlockingQueue: [Dog, Cat]
Removed Element: Dog
New LinkedBlockingQueue: [Cat]

Di sini, take() metode akan melempar InterrupedException jika terganggu saat menunggu. Oleh karena itu, kita harus menyertakannya di dalam try...catch blokir.


Metode Lain

Metode Deskripsi
contains(element) Menelusuri antrean pemblokiran yang ditautkan untuk elemen yang ditentukan. Jika elemen ditemukan, ia mengembalikan true , jika tidak mengembalikan false .
size() Mengembalikan panjang antrian pemblokiran yang ditautkan.
toArray() Mengonversi antrean pemblokiran tertaut menjadi larik dan mengembalikan larik.
toString() Mengonversi antrean pemblokiran yang ditautkan menjadi string

Mengapa menggunakan LinkedBlockingQueue?

LinkedBlockingQueue menggunakan daftar tertaut sebagai penyimpanan internalnya.

Ini dianggap sebagai aman untuk thread koleksi. Oleh karena itu, umumnya digunakan dalam aplikasi multi-threading.

Misalkan, satu utas memasukkan elemen ke antrean dan utas lainnya menghapus elemen dari antrean.

Sekarang, jika utas pertama lebih lambat dari utas kedua, maka antrian pemblokiran yang ditautkan dapat membuat utas kedua menunggu hingga utas pertama menyelesaikan operasinya.


java

  1. Operator Jawa
  2. Komentar Jawa
  3. Java untuk setiap Loop
  4. String Jawa
  5. Antarmuka Jawa
  6. Kelas Anonim Java
  7. Java mencoba-dengan-sumber daya
  8. Anotasi Jawa
  9. Pernyataan Jawa
  10. Vektor Jawa