首页 > 解决方案 > 如何在 LIFO 模式下实现链接阻塞队列

问题描述

标题已经说明了一切,在我的代码中,我有一个实现链接阻塞队列并提供在队列中插入和获取元素的方法的对象,我希望以 LIFO 方式从队列中插入/提取而不是以先进先出的方式,有什么办法吗?

import java.util.concurrent.BlockingQueue;
import java.util.concurrent.LinkedBlockingQueue;

public class Usr {
    private BlockingQueue<String> requestsQueue = new LinkedBlockingQueue<String>();

    public Usr() {

    }

    public void insertRequest(String username) {

        try {
            this.requestsQueue.put(username);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    public String getRequest() {
        try {
            return this.requestsQueue.take();
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            return null;
        }
    }
}

标签: javaqueuefifolifo

解决方案


只需将您的替换LinkedBlockingQueueLinkedBlockingDeque并使用takeLast()而不是take()

Deque 是一个支持两端元素插入和移除的集合。在此处查看详细信息: https ://docs.oracle.com/javase/7/docs/api/java/util/Deque.html https://docs.oracle.com/javase/7/docs/api/java/util /concurrent/LinkedBlockingDeque.html

干杯!


推荐阅读