On Fri, 21 Jul 2023 12:31:07 GMT, Doug Lea <[email protected]> wrote:
>> This update addresses performance issues across both LinkedTransferQueue and
>> SynchronousQueue by creating a common basis for implementation across them
>> (mainly in LinkedTransferQueue). Pasting from internal doc summary of
>> changes:
>> * * Class DualNode replaces Qnode, with fields and methods
>> * that apply to any match-based dual data structure, and now
>> * usable in other j.u.c classes. in particular, SynchronousQueue.
>> * * Blocking control (in class DualNode) accommodates
>> * VirtualThreads and (perhaps virtualized) uniprocessors.
>> * * All fields of this class (LinkedTransferQueue) are
>> * default-initializable (to null), allowing further extension
>> * (in particular, SynchronousQueue.Transferer)
>> * * Head and tail fields are lazily initialized rather than set
>> * to a dummy node, while also reducing retries under heavy
>> * contention and misorderings, and relaxing some accesses,
>> * requiring accommodation in many places (as well as
>> * adjustments in WhiteBox tests).
>
> Doug Lea has updated the pull request incrementally with one additional
> commit since the last revision:
>
> Address review comments
src/java.base/share/classes/java/util/concurrent/LinkedTransferQueue.java line
1584:
> 1582: if (isData) {
> 1583: action.accept((E) item);
> 1584: pred = p; p = q; continue;
@DougLea These three statements deserve their own lines, I'd say. :)
-------------
PR Review Comment: https://git.openjdk.org/jdk/pull/14317#discussion_r1270715057