Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Industrial programming >> Java

Java ArrayBlockingQueue

Java ArrayBlockingQueue


Neste tutorial, aprenderemos sobre a classe ArrayBlockingQueue e seus métodos com a ajuda de exemplos.

O ArrayBlockingQueue A classe da estrutura Java Collections fornece a implementação da fila de bloqueio usando um array.

Ele implementa a interface Java BlockingQueue.



Criando ArrayBlockingQueue


Para criar uma fila de bloqueio de array, devemos importar o java.util.concurrent.ArrayBlockingQueue pacote.

Depois de importar o pacote, veja como podemos criar uma fila de bloqueio de array em Java:
ArrayBlockingQueue<Type> animal = new ArrayBlockingQueue<>(int capacity);

Aqui,

Por exemplo,
// Creating String type ArrayBlockingQueue with size 5
ArrayBlockingQueue<String> animals = new ArrayBlockingQueue<>(5);

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

Observação: É obrigatório fornecer o tamanho do array.

Métodos de ArrayBlockingQueue


O ArrayBlockingQueue classe fornece a implementação de todos os métodos no BlockingQueue interface.

Esses métodos são usados ​​para inserir, acessar e excluir elementos de filas de bloqueio de array.

Além disso, aprenderemos sobre dois métodos put() e take() que suportam a operação de bloqueio na fila de bloqueio de array.

Esses dois métodos distinguem a fila de bloqueio de array de outras filas típicas.

Inserir Elementos


Por exemplo,
import java.util.concurrent.ArrayBlockingQueue;

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

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

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

Saída
ArrayBlockingQueue: [Dog, Cat, Horse]

Elementos de acesso


Por exemplo,
import java.util.concurrent.ArrayBlockingQueue;
import java.util.Iterator;

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

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

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

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

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

Saída
ArrayBlockingQueue: [Dog, Cat, Horse]
Accessed Element: Dog
ArrayBlockingQueue Elements: Dog, Cat, Horse,

Remover elementos


Por exemplo,
import java.util.concurrent.ArrayBlockingQueue;

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

        animals.add("Dog");
        animals.add("Cat");
        animals.add("Horse");
        System.out.println("ArrayBlockingQueue: " + 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 ArrayBlockingQueue: " + animals);
    }
}



Saída
ArrayBlockingQueue: [Dog, Cat, Horse]
Removed Elements:
Using remove(): Dog
Using poll(): Cat
Updated ArrayBlockingQueue: []

Método put() e take()


Em processos multithreading, podemos usar put() e take() para bloquear a operação de um thread para sincronizá-lo com outro thread. Esses métodos aguardarão até que possam ser executados com sucesso.

método put()


Para adicionar um elemento ao final de uma fila de bloqueio de array, podemos usar o put() método.

Se a fila de bloqueio de array estiver cheia, ela espera até que haja espaço na fila de bloqueio de array para adicionar um elemento.

Por exemplo,
import java.util.concurrent.ArrayBlockingQueue;

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

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

Saída
ArrayBlockingQueue: [Dog, Cat]

Aqui, o put() pode lançar um InterruptedException se for interrompido enquanto espera. Portanto, devemos colocá-lo dentro de um try..catch quadra.

Método take()


Para retornar e remover um elemento da frente da fila de bloqueio do array, podemos usar o take() método.

Se a fila de bloqueio de array estiver vazia, ela espera até que haja elementos na fila de bloqueio de array a serem excluídos.

Por exemplo,
import java.util.concurrent.ArrayBlockingQueue;

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

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

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

Saída
ArrayBlockingQueue: [Dog, Cat]
Removed Element: Dog

Aqui, o take() método lançará um InterrupedException se for interrompido enquanto espera. Portanto, devemos colocá-lo dentro de um try...catch quadra.

Outros métodos

Métodos Descrições
contains(element) Pesquisa a fila de bloqueio de array para o elemento especificado.Se o elemento for encontrado, ele retornará true , caso contrário, retornará false .
size() Retorna o comprimento da fila de bloqueio de array.
toArray() Converte a fila de bloqueio de array em um array e o retorna.
toString() Converte a fila de bloqueio de array em string

Por que usar ArrayBlockingQueue?


O ArrayBlockingQueue usa arrays como seu armazenamento interno.

É considerado um segmento seguro coleção. Por isso, é geralmente usado em aplicativos multi-threading.

Suponha que uma thread esteja inserindo elementos na fila e outra thread esteja removendo elementos da fila.

Agora, se o primeiro thread for mais lento que o segundo thread, a fila de bloqueio de array pode fazer com que o segundo thread espere até que o primeiro thread conclua suas operações.

Java

  1. Operadores Java
  2. Comentários Java
  3. Java para cada loop
  4. Strings Java
  5. Interface Java
  6. Classe anônima Java
  7. Java try-with-resources
  8. Anotações Java
  9. Asserções Java
  10. Vetor Java