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

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

Java 中的 LinkedBlockingDeque putLast() 方法

LinkedBlockingDeque 是 Java 中的一个双端阻塞队列,它继承自 BlockingDeque 接口并且实现了 Deque 接口。其中 putLast(E e) 方法用于将指定元素添加到队列的尾部,如果队列已满,则阻塞等待,直到队列有空闲位置为止。

语法
public void putLast(E e) throws InterruptedException 
参数说明
  • e:要添加到队列尾部的元素。
异常
  • InterruptedException:如果线程在等待空闲位置时被中断。
返回值
  • 该方法没有返回值,如果成功添加元素,则直接添加到队列的尾部,如果队列已满则阻塞等待。
使用示例
import java.util.concurrent.LinkedBlockingDeque;

public class LinkedBlockingDequeExample {
    public static void main(String[] args) throws InterruptedException {
        LinkedBlockingDeque<Integer> deque = new LinkedBlockingDeque<>(3);
        deque.putLast(1);
        deque.putLast(2);
        deque.putLast(3);

        // 尝试向已满队列添加元素,会导致阻塞
        System.out.println("将会阻塞...");
        deque.putLast(4);
        System.out.println("已添加元素 4");

        System.out.println(deque);
    }
}

以上示例创建了一个容量为 3 的双端阻塞队列,向其中添加了 3 个整数。接着尝试向已满的队列添加元素 4,会导致阻塞。最后打印队列中的元素,输出如下:

将会阻塞...
已添加元素 4
[1, 2, 3, 4]

从输出结果中可以看到,线程在 putLast() 方法处被阻塞,直到队列中有空闲位置,才能够添加元素。同时也可以看到,元素 4 已经成功添加到了队列的尾部。

注意事项
  • 如果队列已满,putLast() 方法会导致当前线程阻塞,直到队列中有空闲位置。
  • 如果队列已满,且当前线程被中断,则会抛出 InterruptedException 异常。
  • LinkedBlockingDeque 双端阻塞队列是一个无界队列,可以根据需要动态调整队列容量。
  • LinkedBlockingDeque 双端阻塞队列实现了 BlockingDeque 和 Deque 接口,具有双端队列的特性,可以在队列的头部和尾部分别添加、删除元素。