On Fri, 21 Jul 2023 12:31:07 GMT, Doug Lea <d...@openjdk.org> 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