Java Queues - 为什么是“轮询”和“报价”?

2022-09-01 00:31:37

好吧,我已经使用Java很长时间了,最近一直在准备我的OCJP考试。我想知道是否有人能够提供任何见解,说明为什么选择“poll”(而不是更传统的“pop”)和“offer”(而不是更传统的“push”)这两种方法?我正在专门研究java.util.Queue接口,但对更一般的解释感兴趣,:)

这实际上更像是一个学术问题,而不是任何特定的编码场景,因为我只是想弄清楚为什么Sun(因为这是在Oracle收购它们之前完成的)会选择它们的名称。

哦,在任何人决定把我钉死在十字架上或扔回lmgtfy的链接之前......我已经看过谷歌,雅虎,维基,必应和SO,所以如果我忽略了一些明显的搜索标准,或者错过了一些解释它的旧帖子,那么我提前道歉。


答案 1

因为这些方法在 JavaDoc 中解释有不同的语义。/ 是无条件的,而 / 返回特殊值addremoveofferpoll

  • offer提供新值,但可能不被接受,例如,如果队列已满

  • poll轮询该值,但我们接受该值可能不存在的事实。

更复杂的是,BlockingQueue引入了另一对阻止/的方法。当然,他们可以使用相同的名称和一堆参数/标志,addremove

smellyGet(boolean blocking, boolean failOnEmpty)

但你不认为这是一个更好的设计吗?

        | Throws ex. | Special v. | Blocks | Times out
--------+------------+------------+--------+---------------------
Insert  | add(e)     | offer(e)   | put(e) | offer(e, time, unit)
Remove  | remove()   | poll()     | take() | poll(time, unit)
Examine | element()  | peek()     | N/A    | N/A

* https://meta.stackexchange.com/questions/73566


答案 2

你混淆了队列和堆栈;推和弹出与后者有关。

在适当的生产者/消费者上下文中考虑队列;投票和报价将更有意义。


推荐