public final class com.lmax.disruptor.WorkerPool<T>
minor version: 0
major version: 59
flags: flags: (0x0031) ACC_PUBLIC, ACC_FINAL, ACC_SUPER
this_class: com.lmax.disruptor.WorkerPool
super_class: java.lang.Object
{
private final java.util.concurrent.atomic.AtomicBoolean started;
descriptor: Ljava/util/concurrent/atomic/AtomicBoolean;
flags: (0x0012) ACC_PRIVATE, ACC_FINAL
private final com.lmax.disruptor.Sequence workSequence;
descriptor: Lcom/lmax/disruptor/Sequence;
flags: (0x0012) ACC_PRIVATE, ACC_FINAL
private final com.lmax.disruptor.RingBuffer<T> ringBuffer;
descriptor: Lcom/lmax/disruptor/RingBuffer;
flags: (0x0012) ACC_PRIVATE, ACC_FINAL
Signature: Lcom/lmax/disruptor/RingBuffer<TT;>;
private final com.lmax.disruptor.WorkProcessor<?>[] workProcessors;
descriptor: [Lcom/lmax/disruptor/WorkProcessor;
flags: (0x0012) ACC_PRIVATE, ACC_FINAL
Signature: [Lcom/lmax/disruptor/WorkProcessor<*>;
public void <init>(com.lmax.disruptor.RingBuffer<T>, com.lmax.disruptor.SequenceBarrier, com.lmax.disruptor.ExceptionHandler<? super T>, com.lmax.disruptor.WorkHandler<? super T>[]);
descriptor: (Lcom/lmax/disruptor/RingBuffer;Lcom/lmax/disruptor/SequenceBarrier;Lcom/lmax/disruptor/ExceptionHandler;[Lcom/lmax/disruptor/WorkHandler;)V
flags: (0x0081) ACC_PUBLIC, ACC_VARARGS
Code:
stack=9, locals=7, args_size=5
start local 0 start local 1 start local 2 start local 3 start local 4 0: aload 0
invokespecial java.lang.Object.<init>:()V
1: aload 0
new java.util.concurrent.atomic.AtomicBoolean
dup
iconst_0
invokespecial java.util.concurrent.atomic.AtomicBoolean.<init>:(Z)V
putfield com.lmax.disruptor.WorkerPool.started:Ljava/util/concurrent/atomic/AtomicBoolean;
2: aload 0
new com.lmax.disruptor.Sequence
dup
ldc -1
invokespecial com.lmax.disruptor.Sequence.<init>:(J)V
putfield com.lmax.disruptor.WorkerPool.workSequence:Lcom/lmax/disruptor/Sequence;
3: aload 0
aload 1
putfield com.lmax.disruptor.WorkerPool.ringBuffer:Lcom/lmax/disruptor/RingBuffer;
4: aload 4
arraylength
istore 5
start local 5 5: aload 0
iload 5
anewarray com.lmax.disruptor.WorkProcessor
putfield com.lmax.disruptor.WorkerPool.workProcessors:[Lcom/lmax/disruptor/WorkProcessor;
6: iconst_0
istore 6
start local 6 7: goto 16
8: StackMap locals: com.lmax.disruptor.WorkerPool com.lmax.disruptor.RingBuffer com.lmax.disruptor.SequenceBarrier com.lmax.disruptor.ExceptionHandler com.lmax.disruptor.WorkHandler[] int int
StackMap stack:
aload 0
getfield com.lmax.disruptor.WorkerPool.workProcessors:[Lcom/lmax/disruptor/WorkProcessor;
iload 6
new com.lmax.disruptor.WorkProcessor
dup
9: aload 1
10: aload 2
11: aload 4
iload 6
aaload
12: aload 3
13: aload 0
getfield com.lmax.disruptor.WorkerPool.workSequence:Lcom/lmax/disruptor/Sequence;
invokespecial com.lmax.disruptor.WorkProcessor.<init>:(Lcom/lmax/disruptor/RingBuffer;Lcom/lmax/disruptor/SequenceBarrier;Lcom/lmax/disruptor/WorkHandler;Lcom/lmax/disruptor/ExceptionHandler;Lcom/lmax/disruptor/Sequence;)V
14: aastore
15: iinc 6 1
StackMap locals:
StackMap stack:
16: iload 6
iload 5
if_icmplt 8
end local 6 17: return
end local 5 end local 4 end local 3 end local 2 end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 18 0 this Lcom/lmax/disruptor/WorkerPool<TT;>;
0 18 1 ringBuffer Lcom/lmax/disruptor/RingBuffer<TT;>;
0 18 2 sequenceBarrier Lcom/lmax/disruptor/SequenceBarrier;
0 18 3 exceptionHandler Lcom/lmax/disruptor/ExceptionHandler<-TT;>;
0 18 4 workHandlers [Lcom/lmax/disruptor/WorkHandler;
5 18 5 numWorkers I
7 17 6 i I
Signature: (Lcom/lmax/disruptor/RingBuffer<TT;>;Lcom/lmax/disruptor/SequenceBarrier;Lcom/lmax/disruptor/ExceptionHandler<-TT;>;[Lcom/lmax/disruptor/WorkHandler<-TT;>;)V
RuntimeVisibleAnnotations:
java.lang.SafeVarargs()
MethodParameters:
Name Flags
ringBuffer final
sequenceBarrier final
exceptionHandler final
workHandlers final
public void <init>(com.lmax.disruptor.EventFactory<T>, com.lmax.disruptor.ExceptionHandler<? super T>, com.lmax.disruptor.WorkHandler<? super T>[]);
descriptor: (Lcom/lmax/disruptor/EventFactory;Lcom/lmax/disruptor/ExceptionHandler;[Lcom/lmax/disruptor/WorkHandler;)V
flags: (0x0081) ACC_PUBLIC, ACC_VARARGS
Code:
stack=9, locals=7, args_size=4
start local 0 start local 1 start local 2 start local 3 0: aload 0
invokespecial java.lang.Object.<init>:()V
1: aload 0
new java.util.concurrent.atomic.AtomicBoolean
dup
iconst_0
invokespecial java.util.concurrent.atomic.AtomicBoolean.<init>:(Z)V
putfield com.lmax.disruptor.WorkerPool.started:Ljava/util/concurrent/atomic/AtomicBoolean;
2: aload 0
new com.lmax.disruptor.Sequence
dup
ldc -1
invokespecial com.lmax.disruptor.Sequence.<init>:(J)V
putfield com.lmax.disruptor.WorkerPool.workSequence:Lcom/lmax/disruptor/Sequence;
3: aload 0
aload 1
sipush 1024
new com.lmax.disruptor.BlockingWaitStrategy
dup
invokespecial com.lmax.disruptor.BlockingWaitStrategy.<init>:()V
invokestatic com.lmax.disruptor.RingBuffer.createMultiProducer:(Lcom/lmax/disruptor/EventFactory;ILcom/lmax/disruptor/WaitStrategy;)Lcom/lmax/disruptor/RingBuffer;
putfield com.lmax.disruptor.WorkerPool.ringBuffer:Lcom/lmax/disruptor/RingBuffer;
4: aload 0
getfield com.lmax.disruptor.WorkerPool.ringBuffer:Lcom/lmax/disruptor/RingBuffer;
iconst_0
anewarray com.lmax.disruptor.Sequence
invokevirtual com.lmax.disruptor.RingBuffer.newBarrier:([Lcom/lmax/disruptor/Sequence;)Lcom/lmax/disruptor/SequenceBarrier;
astore 4
start local 4 5: aload 3
arraylength
istore 5
start local 5 6: aload 0
iload 5
anewarray com.lmax.disruptor.WorkProcessor
putfield com.lmax.disruptor.WorkerPool.workProcessors:[Lcom/lmax/disruptor/WorkProcessor;
7: iconst_0
istore 6
start local 6 8: goto 17
9: StackMap locals: com.lmax.disruptor.WorkerPool com.lmax.disruptor.EventFactory com.lmax.disruptor.ExceptionHandler com.lmax.disruptor.WorkHandler[] com.lmax.disruptor.SequenceBarrier int int
StackMap stack:
aload 0
getfield com.lmax.disruptor.WorkerPool.workProcessors:[Lcom/lmax/disruptor/WorkProcessor;
iload 6
new com.lmax.disruptor.WorkProcessor
dup
10: aload 0
getfield com.lmax.disruptor.WorkerPool.ringBuffer:Lcom/lmax/disruptor/RingBuffer;
11: aload 4
12: aload 3
iload 6
aaload
13: aload 2
14: aload 0
getfield com.lmax.disruptor.WorkerPool.workSequence:Lcom/lmax/disruptor/Sequence;
invokespecial com.lmax.disruptor.WorkProcessor.<init>:(Lcom/lmax/disruptor/RingBuffer;Lcom/lmax/disruptor/SequenceBarrier;Lcom/lmax/disruptor/WorkHandler;Lcom/lmax/disruptor/ExceptionHandler;Lcom/lmax/disruptor/Sequence;)V
15: aastore
16: iinc 6 1
StackMap locals:
StackMap stack:
17: iload 6
iload 5
if_icmplt 9
end local 6 18: aload 0
getfield com.lmax.disruptor.WorkerPool.ringBuffer:Lcom/lmax/disruptor/RingBuffer;
aload 0
invokevirtual com.lmax.disruptor.WorkerPool.getWorkerSequences:()[Lcom/lmax/disruptor/Sequence;
invokevirtual com.lmax.disruptor.RingBuffer.addGatingSequences:([Lcom/lmax/disruptor/Sequence;)V
19: return
end local 5 end local 4 end local 3 end local 2 end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 20 0 this Lcom/lmax/disruptor/WorkerPool<TT;>;
0 20 1 eventFactory Lcom/lmax/disruptor/EventFactory<TT;>;
0 20 2 exceptionHandler Lcom/lmax/disruptor/ExceptionHandler<-TT;>;
0 20 3 workHandlers [Lcom/lmax/disruptor/WorkHandler;
5 20 4 barrier Lcom/lmax/disruptor/SequenceBarrier;
6 20 5 numWorkers I
8 18 6 i I
Signature: (Lcom/lmax/disruptor/EventFactory<TT;>;Lcom/lmax/disruptor/ExceptionHandler<-TT;>;[Lcom/lmax/disruptor/WorkHandler<-TT;>;)V
RuntimeVisibleAnnotations:
java.lang.SafeVarargs()
MethodParameters:
Name Flags
eventFactory final
exceptionHandler final
workHandlers final
public com.lmax.disruptor.Sequence[] getWorkerSequences();
descriptor: ()[Lcom/lmax/disruptor/Sequence;
flags: (0x0001) ACC_PUBLIC
Code:
stack=4, locals=4, args_size=1
start local 0 0: aload 0
getfield com.lmax.disruptor.WorkerPool.workProcessors:[Lcom/lmax/disruptor/WorkProcessor;
arraylength
iconst_1
iadd
anewarray com.lmax.disruptor.Sequence
astore 1
start local 1 1: iconst_0
istore 2
start local 2 2: aload 0
getfield com.lmax.disruptor.WorkerPool.workProcessors:[Lcom/lmax/disruptor/WorkProcessor;
arraylength
istore 3
start local 3 3: goto 6
4: StackMap locals: com.lmax.disruptor.Sequence[] int int
StackMap stack:
aload 1
iload 2
aload 0
getfield com.lmax.disruptor.WorkerPool.workProcessors:[Lcom/lmax/disruptor/WorkProcessor;
iload 2
aaload
invokevirtual com.lmax.disruptor.WorkProcessor.getSequence:()Lcom/lmax/disruptor/Sequence;
aastore
5: iinc 2 1
StackMap locals:
StackMap stack:
6: iload 2
iload 3
if_icmplt 4
end local 3 end local 2 7: aload 1
aload 1
arraylength
iconst_1
isub
aload 0
getfield com.lmax.disruptor.WorkerPool.workSequence:Lcom/lmax/disruptor/Sequence;
aastore
8: aload 1
areturn
end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 9 0 this Lcom/lmax/disruptor/WorkerPool<TT;>;
1 9 1 sequences [Lcom/lmax/disruptor/Sequence;
2 7 2 i I
3 7 3 size I
public com.lmax.disruptor.RingBuffer<T> start(java.util.concurrent.Executor);
descriptor: (Ljava/util/concurrent/Executor;)Lcom/lmax/disruptor/RingBuffer;
flags: (0x0001) ACC_PUBLIC
Code:
stack=3, locals=8, args_size=2
start local 0 start local 1 0: aload 0
getfield com.lmax.disruptor.WorkerPool.started:Ljava/util/concurrent/atomic/AtomicBoolean;
iconst_0
iconst_1
invokevirtual java.util.concurrent.atomic.AtomicBoolean.compareAndSet:(ZZ)Z
ifne 2
1: new java.lang.IllegalStateException
dup
ldc "WorkerPool has already been started and cannot be restarted until halted."
invokespecial java.lang.IllegalStateException.<init>:(Ljava/lang/String;)V
athrow
2: StackMap locals:
StackMap stack:
aload 0
getfield com.lmax.disruptor.WorkerPool.ringBuffer:Lcom/lmax/disruptor/RingBuffer;
invokevirtual com.lmax.disruptor.RingBuffer.getCursor:()J
lstore 2
start local 2 3: aload 0
getfield com.lmax.disruptor.WorkerPool.workSequence:Lcom/lmax/disruptor/Sequence;
lload 2
invokevirtual com.lmax.disruptor.Sequence.set:(J)V
4: aload 0
getfield com.lmax.disruptor.WorkerPool.workProcessors:[Lcom/lmax/disruptor/WorkProcessor;
dup
astore 7
arraylength
istore 6
iconst_0
istore 5
goto 9
StackMap locals: com.lmax.disruptor.WorkerPool java.util.concurrent.Executor long top int int com.lmax.disruptor.WorkProcessor[]
StackMap stack:
5: aload 7
iload 5
aaload
astore 4
start local 4 6: aload 4
invokevirtual com.lmax.disruptor.WorkProcessor.getSequence:()Lcom/lmax/disruptor/Sequence;
lload 2
invokevirtual com.lmax.disruptor.Sequence.set:(J)V
7: aload 1
aload 4
invokeinterface java.util.concurrent.Executor.execute:(Ljava/lang/Runnable;)V
end local 4 8: iinc 5 1
StackMap locals:
StackMap stack:
9: iload 5
iload 6
if_icmplt 5
10: aload 0
getfield com.lmax.disruptor.WorkerPool.ringBuffer:Lcom/lmax/disruptor/RingBuffer;
areturn
end local 2 end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 11 0 this Lcom/lmax/disruptor/WorkerPool<TT;>;
0 11 1 executor Ljava/util/concurrent/Executor;
3 11 2 cursor J
6 8 4 processor Lcom/lmax/disruptor/WorkProcessor<*>;
Signature: (Ljava/util/concurrent/Executor;)Lcom/lmax/disruptor/RingBuffer<TT;>;
MethodParameters:
Name Flags
executor final
public void drainAndHalt();
descriptor: ()V
flags: (0x0001) ACC_PUBLIC
Code:
stack=4, locals=6, args_size=1
start local 0 0: aload 0
invokevirtual com.lmax.disruptor.WorkerPool.getWorkerSequences:()[Lcom/lmax/disruptor/Sequence;
astore 1
start local 1 1: goto 3
2: StackMap locals: com.lmax.disruptor.Sequence[]
StackMap stack:
invokestatic java.lang.Thread.yield:()V
3: StackMap locals:
StackMap stack:
aload 0
getfield com.lmax.disruptor.WorkerPool.ringBuffer:Lcom/lmax/disruptor/RingBuffer;
invokevirtual com.lmax.disruptor.RingBuffer.getCursor:()J
aload 1
invokestatic com.lmax.disruptor.util.Util.getMinimumSequence:([Lcom/lmax/disruptor/Sequence;)J
lcmp
ifgt 2
4: aload 0
getfield com.lmax.disruptor.WorkerPool.workProcessors:[Lcom/lmax/disruptor/WorkProcessor;
dup
astore 5
arraylength
istore 4
iconst_0
istore 3
goto 8
StackMap locals: com.lmax.disruptor.WorkerPool com.lmax.disruptor.Sequence[] top int int com.lmax.disruptor.WorkProcessor[]
StackMap stack:
5: aload 5
iload 3
aaload
astore 2
start local 2 6: aload 2
invokevirtual com.lmax.disruptor.WorkProcessor.halt:()V
end local 2 7: iinc 3 1
StackMap locals:
StackMap stack:
8: iload 3
iload 4
if_icmplt 5
9: aload 0
getfield com.lmax.disruptor.WorkerPool.started:Ljava/util/concurrent/atomic/AtomicBoolean;
iconst_0
invokevirtual java.util.concurrent.atomic.AtomicBoolean.set:(Z)V
10: return
end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 11 0 this Lcom/lmax/disruptor/WorkerPool<TT;>;
1 11 1 workerSequences [Lcom/lmax/disruptor/Sequence;
6 7 2 processor Lcom/lmax/disruptor/WorkProcessor<*>;
public void halt();
descriptor: ()V
flags: (0x0001) ACC_PUBLIC
Code:
stack=2, locals=5, args_size=1
start local 0 0: aload 0
getfield com.lmax.disruptor.WorkerPool.workProcessors:[Lcom/lmax/disruptor/WorkProcessor;
dup
astore 4
arraylength
istore 3
iconst_0
istore 2
goto 4
StackMap locals: com.lmax.disruptor.WorkerPool top int int com.lmax.disruptor.WorkProcessor[]
StackMap stack:
1: aload 4
iload 2
aaload
astore 1
start local 1 2: aload 1
invokevirtual com.lmax.disruptor.WorkProcessor.halt:()V
end local 1 3: iinc 2 1
StackMap locals:
StackMap stack:
4: iload 2
iload 3
if_icmplt 1
5: aload 0
getfield com.lmax.disruptor.WorkerPool.started:Ljava/util/concurrent/atomic/AtomicBoolean;
iconst_0
invokevirtual java.util.concurrent.atomic.AtomicBoolean.set:(Z)V
6: return
end local 0 LocalVariableTable:
Start End Slot Name Signature
0 7 0 this Lcom/lmax/disruptor/WorkerPool<TT;>;
2 3 1 processor Lcom/lmax/disruptor/WorkProcessor<*>;
public boolean isRunning();
descriptor: ()Z
flags: (0x0001) ACC_PUBLIC
Code:
stack=1, locals=1, args_size=1
start local 0 0: aload 0
getfield com.lmax.disruptor.WorkerPool.started:Ljava/util/concurrent/atomic/AtomicBoolean;
invokevirtual java.util.concurrent.atomic.AtomicBoolean.get:()Z
ireturn
end local 0 LocalVariableTable:
Start End Slot Name Signature
0 1 0 this Lcom/lmax/disruptor/WorkerPool<TT;>;
}
Signature: <T:Ljava/lang/Object;>Ljava/lang/Object;
SourceFile: "WorkerPool.java"