RFR: 8355726: LinkedBlockingDeque fixes and improvements

Viktor Klang vklang at openjdk.org
Fri May 9 14:53:52 UTC 2025


On Thu, 8 May 2025 13:47:41 GMT, kabutz <duke at openjdk.org> wrote:

>> src/java.base/share/classes/java/util/concurrent/LinkedBlockingDeque.java line 341:
>> 
>>> 339:             if (count >= capacity)
>>> 340:                 return false;
>>> 341:             linkFirst(node);
>> 
>> I'm a bit uneasy about incrementing the `count` in `linkFirst` but not enforcing the invariant. What's the benefit to changing linkFirst and linkLast to return void instead of keeping the original returning a boolean?
>
>> I'm a bit uneasy about incrementing the `count` in `linkFirst` but not enforcing the invariant. What's the benefit to changing linkFirst and linkLast to return void instead of keeping the original returning a boolean?
> 
> I based the approach on the LBQ enqueue() and dequeue() methods, which also return void and have a comment with the assertion.

I understand, alas LBQ enqueue() and dequeue() don't increment a counter. It seems a bit brittle that the invariant needs to be maintained *externally* to the state modification. For the sake of maintainability I think the checks and the increment/decrement belongs in the same unit of work.

-------------

PR Review Comment: https://git.openjdk.org/jdk/pull/24925#discussion_r2081852042


More information about the core-libs-dev mailing list