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 BlockingQueue

Java BlockingQueue


Neste tutorial, aprenderemos sobre a interface Java BlockingQueue e seus métodos.

O BlockingQueue interface do Java Collections framework estende o Queue interface. Ele permite que qualquer operação espere até que possa ser executada com sucesso.

Por exemplo, se quisermos excluir um elemento de uma fila vazia, a fila de bloqueio permite que a operação de exclusão aguarde até que a fila contenha alguns elementos a serem excluídos.

Classes que implementam BlockingQueue


Desde BlockingQueue é uma interface, não podemos fornecer a implementação direta dela.

Para usar a funcionalidade do BlockingQueue , precisamos usar classes que o implementam.



Como usar filas de bloqueio?


Devemos importar o java.util.concurrent.BlockingQueue pacote para usar BlockingQueue .
// Array implementation of BlockingQueue
BlockingQueue<String> animal1 = new ArraryBlockingQueue<>();

// LinkedList implementation of BlockingQueue
BlockingQueue<String> animal2 = new LinkedBlockingQueue<>();

Aqui, criamos objetos animal1 e animal2 de classes ArrayBlockingQueue e LinkedBlockingQueue , respectivamente. Esses objetos podem usar as funcionalidades do BlockingQueue interface.

Métodos de bloqueio de fila


Com base no fato de uma fila estar cheia ou vazia, os métodos de uma fila de bloqueio podem ser divididos em 3 categorias:

Métodos que lançam uma exceção


Métodos que retornam algum valor


Mais sobre offer() e poll()

O offer() e poll() pode ser usado com timeouts. Ou seja, podemos passar unidades de tempo como parâmetro. Por exemplo,
offer(value, 100, milliseconds)



Aqui,

Isso significa que o offer() tentará inserir um elemento na fila de bloqueio para 100 milissegundos. Se o elemento não puder ser inserido em 100 milissegundos, o método retornará false .

Observação: Em vez de milliseconds , também podemos usar estas unidades de tempo:days , hours , minutes , seconds , microseconds e nanoseconds em offer() e poll() métodos.

Métodos que bloqueiam a operação


O BlockingQueue também fornece métodos para bloquear as operações e aguardar se a fila estiver cheia ou vazia.

Suponha que queremos inserir elementos em uma fila. Se a fila estiver cheia, o put() O método aguardará até que a fila tenha espaço para inserir elementos.

Da mesma forma, se quisermos excluir elementos de uma fila. Se a fila estiver vazia, o take() O método aguardará até que a fila contenha elementos a serem excluídos.

Implementação de BlockingQueue em ArrayBlockingQueue

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

class Main {

    public static void main(String[] args) {
      // Create a blocking queue using the ArrayBlockingQueue
      BlockingQueue<Integer> numbers = new ArrayBlockingQueue<>(5);

      try {
        // Insert element to blocking queue
        numbers.put(2);
        numbers.put(1);
        numbers.put(3);
        System.out.println("BLockingQueue: " + numbers);

        // Remove Elements from blocking queue
        int removedNumber = numbers.take();
        System.out.println("Removed Number: " + removedNumber);
      }

      catch(Exception e) {
          e.getStackTrace();
      }
    }
}

Saída
BlockingQueue: [2, 1, 3]
Removed Element: 2

Para saber mais sobre ArrayBlockingQueue , visite Java ArrayBlockingQueue.

Por que bloquear fila?


Em Java, BlockingQueue é considerado o segmento seguro coleção. É porque pode ser útil em operações multi-threading.

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

Agora, se o primeiro encadeamento for executado mais lentamente, a fila de bloqueio pode fazer o segundo encadeamento esperar até que o primeiro encadeamento conclua sua operação.

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