📌  相关文章
📜  Java中的 LinkedBlockingDeque takeFirst() 方法(1)

📅  最后修改于: 2023-12-03 15:01:54.374000             🧑  作者: Mango

Java中的 LinkedBlockingDeque takeFirst() 方法介绍

概述

LinkedBlockingDeque 是一个基于链表实现的双端阻塞队列,用于多线程场景下的数据存储和转移。takeFirst() 方法用于从队列的头部取出一个元素,如果队列为空则阻塞等待直到队列有可用元素。

语法
public E takeFirst() throws InterruptedException
返回值
  • 如果队列不为空,则返回队列头部的元素;
  • 如果队列为空,调用该方法的线程将进入阻塞状态,直到队列有可取出的元素。
异常
  • 如果等待过程中发生了中断,则会抛出 InterruptedException 异常。
示例代码
import java.util.concurrent.LinkedBlockingDeque;

public class Example {
    public static void main(String[] args) {
        LinkedBlockingDeque<Integer> deque = new LinkedBlockingDeque<>();

        // 创建并启动一个线程往队列中添加元素
        Thread producer = new Thread(() -> {
            try {
                for (int i = 0; i < 5; i++) {
                    deque.put(i);
                    Thread.sleep(1000);
                }
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        });
        producer.start();

        // 创建并启动一个线程从队列头部取出元素
        Thread consumer = new Thread(() -> {
            try {
                for (int i = 0; i < 5; i++) {
                    int element = deque.takeFirst();
                    System.out.println("Element taken: " + element);
                }
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        });
        consumer.start();
    }
}

在上述示例中,一个线程通过 put() 方法向队列中添加元素,另一个线程通过 takeFirst() 方法从队列头部取出元素。如果队列为空,takeFirst() 方法会阻塞等待,直到有可取出的元素。输出结果如下:

Element taken: 0
Element taken: 1
Element taken: 2
Element taken: 3
Element taken: 4

以上就是关于 Java 中 LinkedBlockingDeque 类的 takeFirst() 方法的介绍。此方法可以有效地在多线程环境下进行数据的有序存取。