亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Industrial programming >> java

Java 阻塞队列

Java 阻塞队列

在本教程中,我们将学习 Java BlockingQueue 接口及其方法。

BlockingQueue Java接口Collections 框架扩展了 Queue 界面。它允许任何操作等到可以成功执行。

例如,如果我们想从一个空队列中删除一个元素,那么阻塞队列允许删除操作等到队列包含一些要删除的元素。


实现 BlockingQueue 的类

BlockingQueue 是一个接口,我们不能提供它的直接实现。

为了使用 BlockingQueue 的功能 ,我们需要使用实现它的类。


如何使用阻塞队列?

我们必须导入 java.util.concurrent.BlockingQueue 包以便使用 BlockingQueue .

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

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

在这里,我们创建了对象 animal1animal2ArrayBlockingQueueLinkedBlockingQueue , 分别。这些对象可以使用 BlockingQueue 的功能 界面。


BlockingQueue的方法

根据队列是满还是空,阻塞队列的方法可以分为3类:

抛出异常的方法


返回一些值的方法

更多关于 offer() 和 poll()

offer()poll() 方法可以与超时一起使用。也就是说,我们可以将时间单位作为参数传递。例如,

offer(value, 100, milliseconds)

在这里,

这意味着 offer() 方法将尝试向 100 的阻塞队列插入一个元素 毫秒。如果 100 毫秒内无法插入元素,则方法返回 false .

注意: 而不是 milliseconds ,我们也可以使用这些时间单位:days , hours , minutes , seconds , microsecondsnanosecondsoffer()poll() 方法。


阻止操作的方法

BlockingQueue 还提供阻塞操作并等待队列满或空的方法。

假设我们想将元素插入队列。如果队列已满,则 put() 方法会一直等到队列有空间插入元素。

同样,如果我们想从队列中删除元素。如果队列为空,则 take() 方法会一直等到队列中包含要删除的元素。


ArrayBlockingQueue中BlockingQueue的实现

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。


为什么选择阻塞队列?

在 Java 中,BlockingQueue 被认为是线程安全的 收藏。这是因为它可以在多线程操作中有所帮助。

假设一个线程正在向队列中插入元素,而另一个线程正在从队列中移除元素。

现在,如果第一个线程运行速度较慢,那么阻塞队列可以让第二个线程等待,直到第一个线程完成它的操作。


java

  1. Java 运算符
  2. Java 评论
  3. Java if...else 语句
  4. Java for-each 循环
  5. Java break 语句
  6. Java 字符串
  7. Java 接口
  8. Java 匿名类
  9. Java try-with-resources
  10. Java 注释
  11. Java 断言
  12. Java 向量