В соответствии с Javadocs PriorityBlockingQueue не гарантирует упорядочения элементов с равным приоритетом. Они предлагают использовать дополнительный ключ (sequenceNumber) для принудительного выполнения определенного заказа (например, FIFO).Java PriorityBlockingQueue FIFOEntry порядковый номер
AtomicLong
используется как дополнительный ключ в данном примере FIFOEntry на этой странице. Однако предел этого вторичного ключа не рассматривается в этом коде. Похоже, что если мы продолжим называть getAndIncrement()
, когда длинный предел превышает, поведение FIFO будет искажено.
Что мы можем сделать против такого переполнения без предупреждения потока приложения? Например, остановить обработку в очереди и обновить все порядковые номера и сбросить seqNum на 0?