根据Javadocs,PriorityBlockingQueue不保证具有相同优先级的元素的排序。他们建议使用辅助密钥(sequenceNumber)来强制执行特定的排序(例如FIFO)。
AtomicLong
在此页面的给定FIFOEntry示例中用作辅助键。但是,此代码不考虑此辅助密钥的限制。似乎如果我们继续调用getAndIncrement()
,当超出限制时,FIFO行为就会被破坏。
在不阻止应用流程的情况下,我们可以做些什么来防止这种溢出?例如,停止队列处理并更新所有序列号并将seqNum重置为0?
答案 0 :(得分:2)
你知道64位数是多大吗?在用完长期值之前,你将早已死亡。
9,223,372,036,854,775,807
是签名长期的最大值,如果您想象每秒使用一百万个数字,那么您将拥有大约292471
年的足够数字。