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
*/
@SuppressWarnings( "unchecked" )
public class WorkSync<Material, W extends Work<Material,W>>
{
private final Material material;
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;

/**
Expand All @@ -62,8 +63,7 @@ public class WorkSync<Material, W extends Work<Material,W>>
public WorkSync( Material material )
{
this.material = material;
this.stackEnd = new WorkUnit<>( null, null, null );
this.stack = new AtomicReference<>( stackEnd );
this.stack = new AtomicReference<>( (WorkUnit<Material,W>) stackEnd );
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 )
{
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()
return unit;
}
Expand Down Expand Up @@ -169,7 +169,7 @@ private void unlock()

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 )
Expand All @@ -193,7 +193,7 @@ private Throwable doSynchronizedWork( 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 )
{
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;

final W work;
final WorkUnit<Material,W> stackEnd;
final Thread owner;
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.owner = owner;
this.stackEnd = stackEnd;
}

void park( long time, TimeUnit unit )
Expand Down

0 comments on commit 59595bf

Please sign in to comment.