Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Industrial programming >> java

Очередь блокировки Java

Очередь блокировки Java

В этом руководстве мы узнаем об интерфейсе Java BlockingQueue и его методах.

BlockingQueue интерфейс Java Collections framework расширяет Queue интерфейс. Это позволяет любой операции ждать, пока она не будет успешно выполнена.

Например, если мы хотим удалить элемент из пустой очереди, то блокирующая очередь позволяет операции удаления ждать, пока в очереди не появятся элементы для удаления.

<час>

Классы, реализующие BlockingQueue

С BlockingQueue является интерфейсом, мы не можем предоставить его прямую реализацию.

Чтобы использовать функциональные возможности BlockingQueue , нам нужно использовать классы, которые его реализуют.

<час>

Как использовать блокирующие очереди?

Мы должны импортировать java.util.concurrent.BlockingQueue package для использования BlockingQueue .

// Array implementation of BlockingQueue
BlockingQueue<String> animal1 = new ArraryBlockingQueue<>();

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

Здесь мы создали объекты animal1 и животное2 классов ArrayBlockingQueue и LinkedBlockingQueue , соответственно. Эти объекты могут использовать функциональные возможности BlockingQueue интерфейс.

<час>

Методы блокировки очереди

В зависимости от того, заполнена очередь или пуста, методы блокировки очереди можно разделить на 3 категории:

Методы, вызывающие исключение

<час>

Методы, возвращающие некоторое значение

Подробнее о offer() и poll()

offer() и poll() метод можно использовать с тайм-аутами. То есть мы можем передавать единицы времени в качестве параметра. Например,

offer(value, 100, milliseconds)

Здесь

Это означает, что offer() метод попытается вставить элемент в очередь блокировки для 100 миллисекунды. Если элемент не может быть вставлен за 100 миллисекунд, метод возвращает false .

Примечание. Вместо milliseconds , мы также можем использовать эти единицы времени:days , hours , minutes , seconds , microseconds и nanoseconds в offer() и poll() методы.

<час>

Методы, блокирующие операцию

BlockingQueue также предоставляет методы для блокировки операций и ожидания, если очередь заполнена или пуста.

Предположим, мы хотим вставить элементы в очередь. Если очередь заполнена, то put() будет ждать, пока в очереди не останется места для вставки элементов.

Точно так же, если мы хотим удалить элементы из очереди. Если очередь пуста, то take() метод будет ждать, пока в очереди не появятся элементы для удаления.

<час>

Реализация BlockingQueue в 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();
      }
    }
}

Вывод

BlockingQueue: [2, 1, 3]
Removed Element: 2

Чтобы узнать больше о ArrayBlockingQueue , посетите Java ArrayBlockingQueue.

<час>

Почему BlockingQueue?

В Java BlockingQueue считается поточно-ориентированным коллекция. Это потому, что это может быть полезно в многопоточных операциях.

Предположим, что один поток вставляет элементы в очередь, а другой поток удаляет элементы из очереди.

Теперь, если первый поток работает медленнее, то очередь блокировки может заставить второй поток ждать, пока первый поток не завершит свою работу.


java

  1. Операторы Java
  2. Java-комментарии
  3. Java для каждого цикла
  4. Java-строки
  5. Java-интерфейс
  6. Анонимный класс Java
  7. Java-проба с ресурсами
  8. Java-аннотации
  9. Утверждения Java
  10. Java вектор