Skip to content

Commit

Permalink
Make workSync.stackEnd static because it does not need to be a per in…
Browse files Browse the repository at this point in the history
…stance field
  • Loading branch information
chrisvest committed Oct 6, 2016
1 parent 70a9ad3 commit 59595bf
Showing 1 changed file with 7 additions and 9 deletions.
Expand Up @@ -45,11 +45,12 @@
* *
* @see Work * @see Work
*/ */
@SuppressWarnings( "unchecked" )
public class WorkSync<Material, W extends Work<Material,W>> public class WorkSync<Material, W extends Work<Material,W>>
{ {
private final Material material; private final Material material;
private final AtomicReference<WorkUnit<Material,W>> stack; private final AtomicReference<WorkUnit<Material,W>> stack;
private final WorkUnit<Material,W> stackEnd; private static final WorkUnit<?,?> stackEnd = new WorkUnit<>( null, null );
private final AtomicReference<Thread> lock; private final AtomicReference<Thread> lock;


/** /**
Expand All @@ -62,8 +63,7 @@ public class WorkSync<Material, W extends Work<Material,W>>
public WorkSync( Material material ) public WorkSync( Material material )
{ {
this.material = material; this.material = material;
this.stackEnd = new WorkUnit<>( null, null, null ); this.stack = new AtomicReference<>( (WorkUnit<Material,W>) stackEnd );
this.stack = new AtomicReference<>( stackEnd );
this.lock = new AtomicReference<>(); this.lock = new AtomicReference<>();
} }


Expand Down Expand Up @@ -95,7 +95,7 @@ public void apply( W work ) throws ExecutionException


private WorkUnit<Material,W> enqueueWork( W work ) private WorkUnit<Material,W> enqueueWork( W work )
{ {
WorkUnit<Material,W> unit = new WorkUnit<>( work, Thread.currentThread(), stackEnd ); WorkUnit<Material,W> unit = new WorkUnit<>( work, Thread.currentThread() );
unit.next = stack.getAndSet( unit ); // benign race, see reverse() unit.next = stack.getAndSet( unit ); // benign race, see reverse()
return unit; return unit;
} }
Expand Down Expand Up @@ -169,7 +169,7 @@ private void unlock()


private WorkUnit<Material,W> grabBatch() private WorkUnit<Material,W> grabBatch()
{ {
return reverse( stack.getAndSet( stackEnd ) ); return reverse( stack.getAndSet( (WorkUnit<Material,W>) stackEnd ) );
} }


private Throwable doSynchronizedWork( WorkUnit<Material,W> batch ) private Throwable doSynchronizedWork( WorkUnit<Material,W> batch )
Expand All @@ -193,7 +193,7 @@ private Throwable doSynchronizedWork( WorkUnit<Material,W> batch )


private WorkUnit<Material,W> reverse( WorkUnit<Material,W> batch ) private WorkUnit<Material,W> reverse( WorkUnit<Material,W> batch )
{ {
WorkUnit<Material,W> result = stackEnd; WorkUnit<Material,W> result = (WorkUnit<Material,W>) stackEnd;
while ( batch != stackEnd ) while ( batch != stackEnd )
{ {
WorkUnit<Material,W> tmp = batch.next; WorkUnit<Material,W> tmp = batch.next;
Expand Down Expand Up @@ -248,15 +248,13 @@ private static class WorkUnit<Material, W extends Work<Material,W>> extends Atom
static final int STATE_DONE = 2; static final int STATE_DONE = 2;


final W work; final W work;
final WorkUnit<Material,W> stackEnd;
final Thread owner; final Thread owner;
volatile WorkUnit<Material,W> next; volatile WorkUnit<Material,W> next;


private WorkUnit( W work, Thread owner, WorkUnit<Material,W> stackEnd ) private WorkUnit( W work, Thread owner )
{ {
this.work = work; this.work = work;
this.owner = owner; this.owner = owner;
this.stackEnd = stackEnd;
} }


void park( long time, TimeUnit unit ) void park( long time, TimeUnit unit )
Expand Down

0 comments on commit 59595bf

Please sign in to comment.