как реализовать связанную очередь блокировки в режиме LIFO - PullRequest
1 голос
/ 10 января 2020

заголовок уже говорит сам за себя, в моем коде у меня есть объект, который реализует Linked Blocking Queue и предлагает методы вставки и получения элемента в очереди, я бы хотел, чтобы вставка / извлечение из очереди происходила в LIFO, а не FIFO, есть ли способ сделать это?

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;
        }
    }
}

1 Ответ

0 голосов
/ 10 января 2020

Просто замените LinkedBlockingQueue на LinkedBlockingDeque и используйте 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

Приветствия!

...