LinkedBlockingQueue 与ConcurrentLinkedQueue队列的不同与同
LinkedBlockingQueue 的API中,从队列中获取元素,有以下几个方法:
1、take():原文:Retrieves and removes the head of this queue, waiting if necessary until an element becomes available.
翻译完:从队列中取出元素E,如果队列为空,则阻塞该线程直到队列不为空拿出元素E位置;
这样可能造成的情况是:在生产者消费中模式中,如果生产者已经生产完毕了,消费中消费完毕后,队列为空,此时用take()方法会阻塞,从而导致线程无法关闭,
表现在运行后,eclipse中的terminae一直为红色;
2、poll():原文:Retrieves and removes the head of this queue, or returns null if this queue is empty.
翻译为:取出并删除队列中的首元素,如果队列为空,则返回null,不进行阻塞。
相比于take()可以根据其他条件的判断,关闭线程,不会出现上述状态。
举个例子:生产消费中,生产者一直生产直到生产完毕后,通知消费者,我生产完了,消费者通过pool()方法一直取出元素E,直到某次,从队列取出来的=null,
且此时收到生产者说我生产完了,那么你就可以顺利关闭消费者线程了。
3、poll(long timeout, TimeUnit unit):Retrieves and removes the head of this queue, waiting up to the specified wait time if necessary for an element to become available.
翻译为:取出后删除头元素E,如果取不到则等到timeout时间在取,还是取不到就返回null;
比如得到10秒,timeout为10.TimeUnit.Second
4、peek():Retrieves, but does not remove, the head of this queue, or returns null if this queue is empty.
翻译:取出第一个元素但是不删除它,没有就返回null
ConcurrentLinkedQueue:队列中提供了上面的poll()、peek()方法,因此用ConcurrentLinkedQueue队列不会进行阻塞,
两者都是线程安全的。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
2016-10-17 用UILocalNotification实现一个闹钟(Swift)
2016-10-17 如何在 iOS 8 中使用 Swift 实现本地通知(上)
2016-10-17 如何在 iOS 8 中使用 Swift 实现本地通知(下)
2016-10-17 Swift - 本地消息的推送通知(附样例)
2016-10-17 Swift 本地推送通知UILocalNotification
2014-10-17 Android原理揭秘系列之一动态墙纸