From 59595bf658934dc8f7b398406b4f1076958b4360 Mon Sep 17 00:00:00 2001 From: Chris Vest Date: Thu, 6 Oct 2016 11:28:19 +0200 Subject: [PATCH] Make workSync.stackEnd static because it does not need to be a per instance field --- .../main/java/org/neo4j/concurrent/WorkSync.java | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/community/primitive-collections/src/main/java/org/neo4j/concurrent/WorkSync.java b/community/primitive-collections/src/main/java/org/neo4j/concurrent/WorkSync.java index e6fac2f552ad2..c790487e8d021 100644 --- a/community/primitive-collections/src/main/java/org/neo4j/concurrent/WorkSync.java +++ b/community/primitive-collections/src/main/java/org/neo4j/concurrent/WorkSync.java @@ -45,11 +45,12 @@ * * @see Work */ +@SuppressWarnings( "unchecked" ) public class WorkSync> { private final Material material; private final AtomicReference> stack; - private final WorkUnit stackEnd; + private static final WorkUnit stackEnd = new WorkUnit<>( null, null ); private final AtomicReference lock; /** @@ -62,8 +63,7 @@ public class WorkSync> public WorkSync( Material material ) { this.material = material; - this.stackEnd = new WorkUnit<>( null, null, null ); - this.stack = new AtomicReference<>( stackEnd ); + this.stack = new AtomicReference<>( (WorkUnit) stackEnd ); this.lock = new AtomicReference<>(); } @@ -95,7 +95,7 @@ public void apply( W work ) throws ExecutionException private WorkUnit enqueueWork( W work ) { - WorkUnit unit = new WorkUnit<>( work, Thread.currentThread(), stackEnd ); + WorkUnit unit = new WorkUnit<>( work, Thread.currentThread() ); unit.next = stack.getAndSet( unit ); // benign race, see reverse() return unit; } @@ -169,7 +169,7 @@ private void unlock() private WorkUnit grabBatch() { - return reverse( stack.getAndSet( stackEnd ) ); + return reverse( stack.getAndSet( (WorkUnit) stackEnd ) ); } private Throwable doSynchronizedWork( WorkUnit batch ) @@ -193,7 +193,7 @@ private Throwable doSynchronizedWork( WorkUnit batch ) private WorkUnit reverse( WorkUnit batch ) { - WorkUnit result = stackEnd; + WorkUnit result = (WorkUnit) stackEnd; while ( batch != stackEnd ) { WorkUnit tmp = batch.next; @@ -248,15 +248,13 @@ private static class WorkUnit> extends Atom static final int STATE_DONE = 2; final W work; - final WorkUnit stackEnd; final Thread owner; volatile WorkUnit next; - private WorkUnit( W work, Thread owner, WorkUnit stackEnd ) + private WorkUnit( W work, Thread owner ) { this.work = work; this.owner = owner; - this.stackEnd = stackEnd; } void park( long time, TimeUnit unit )