java - 如何在 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;
}
}
}
解决方案
只需将您的替换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
干杯!
推荐阅读
- python - 从每年一个 df 到 pandas 中的一个多索引 df
- mongodb - 查询数组中最后一个对象
- c# - EF Core - 从集合导航属性中删除相关实体不会更新数据库
- vagrant - 与 Mac 相比,PC 上的 Vagrant + PHPUnit 性能太慢
- javascript - 当我认为它应该是 json 时,获取返回一个承诺?然后它没有正确更新redux
- javascript - 无法在 VueJS 中滚动自定义滚动条
- c# - 尝试激活时无法解析类型“System.Int32”的服务
- javascript - 在一个文档中单独观看时间
- java - java中的运算符“new”,创建字符串
- php - Laravel 5 登录功能更改参数