>标题已经说明了一切,在我的代码中,我有一个实现链接阻塞队列并提供在队列中插入和获取元素的方法的对象,我希望从队列中插入/提取以 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;
}
}
}
只需将您的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
干杯!