2015-10-14 5 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 лет.

Смежные вопросы