Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This version of batchUnordered treats the list of elements as a balanced binary tree, by leveraging the heap-on-array structure, aiming to make the recursion depth O(log(n)) instead of O(n).
It uses an AtomicIntegerArray to maintain the set of pending nodes, and uses an auxiliary AtomicLong to get the index of the pending node which is left-most and highest in the tree.
The algorithm does a Pre-order traversal of the tree. When it encounters a node processed by another thread, it hops to the left-most, highest node in the tree which is not yet processed. This increases the chance that the recursion will be shallow, and reduces the number of times an already processed node is encountered.