2015-10-14 59 views
1

根據Javadocs,PriorityBlockingQueue不保證具有相同優先級的元素的排序。他們建議使用輔助鍵(sequenceNumber)來強制執行特定的順序(例如FIFO)。Java PriorityBlockingQueue FIFOEntry序列號限制

AtomicLong在本頁給出的FIFOEntry示例中用作輔助鍵。但是,此代碼不考慮此次要密鑰的限制。看起來,如果我們繼續呼叫getAndIncrement(),當長限超過時,FIFO行爲已損壞。

我們可以在不阻止應用程序流的情況下對付這樣的溢出嗎?例如,在隊列上停止處理並更新所有序列號並將seqNum重置爲0?

回答

2

你知道64位數字有多大嗎?在耗盡長時間價值之前,你會很久沒有死。

9,223,372,036,854,775,807是簽名長度最大的值,如果您想象每秒使用一百萬個數字,那麼您將擁有足夠的數字大約292471年。