final class java.util.concurrent.SynchronousQueue$TransferQueue<E> extends java.util.concurrent.SynchronousQueue$Transferer<E>
minor version: 0
major version: 59
flags: flags: (0x0030) ACC_FINAL, ACC_SUPER
this_class: java.util.concurrent.SynchronousQueue$TransferQueue
super_class: java.util.concurrent.SynchronousQueue$Transferer
{
volatile transient java.util.concurrent.SynchronousQueue$TransferQueue$QNode head;
descriptor: Ljava/util/concurrent/SynchronousQueue$TransferQueue$QNode;
flags: (0x00c0) ACC_VOLATILE, ACC_TRANSIENT
volatile transient java.util.concurrent.SynchronousQueue$TransferQueue$QNode tail;
descriptor: Ljava/util/concurrent/SynchronousQueue$TransferQueue$QNode;
flags: (0x00c0) ACC_VOLATILE, ACC_TRANSIENT
volatile transient java.util.concurrent.SynchronousQueue$TransferQueue$QNode cleanMe;
descriptor: Ljava/util/concurrent/SynchronousQueue$TransferQueue$QNode;
flags: (0x00c0) ACC_VOLATILE, ACC_TRANSIENT
private static final sun.misc.Unsafe UNSAFE;
descriptor: Lsun/misc/Unsafe;
flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
private static final long headOffset;
descriptor: J
flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
private static final long tailOffset;
descriptor: J
flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
private static final long cleanMeOffset;
descriptor: J
flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
static void <clinit>();
descriptor: ()V
flags: (0x0008) ACC_STATIC
Code:
stack=3, locals=1, args_size=0
0: invokestatic sun.misc.Unsafe.getUnsafe:()Lsun/misc/Unsafe;
putstatic java.util.concurrent.SynchronousQueue$TransferQueue.UNSAFE:Lsun/misc/Unsafe;
1: ldc Ljava/util/concurrent/SynchronousQueue$TransferQueue;
astore 0
start local 0 2: getstatic java.util.concurrent.SynchronousQueue$TransferQueue.UNSAFE:Lsun/misc/Unsafe;
3: aload 0
ldc "head"
invokevirtual java.lang.Class.getDeclaredField:(Ljava/lang/String;)Ljava/lang/reflect/Field;
4: invokevirtual sun.misc.Unsafe.objectFieldOffset:(Ljava/lang/reflect/Field;)J
putstatic java.util.concurrent.SynchronousQueue$TransferQueue.headOffset:J
5: getstatic java.util.concurrent.SynchronousQueue$TransferQueue.UNSAFE:Lsun/misc/Unsafe;
6: aload 0
ldc "tail"
invokevirtual java.lang.Class.getDeclaredField:(Ljava/lang/String;)Ljava/lang/reflect/Field;
7: invokevirtual sun.misc.Unsafe.objectFieldOffset:(Ljava/lang/reflect/Field;)J
putstatic java.util.concurrent.SynchronousQueue$TransferQueue.tailOffset:J
8: getstatic java.util.concurrent.SynchronousQueue$TransferQueue.UNSAFE:Lsun/misc/Unsafe;
9: aload 0
ldc "cleanMe"
invokevirtual java.lang.Class.getDeclaredField:(Ljava/lang/String;)Ljava/lang/reflect/Field;
10: invokevirtual sun.misc.Unsafe.objectFieldOffset:(Ljava/lang/reflect/Field;)J
putstatic java.util.concurrent.SynchronousQueue$TransferQueue.cleanMeOffset:J
end local 0 11: goto 14
StackMap locals:
StackMap stack: java.lang.Exception
12: astore 0
start local 0 13: new java.lang.Error
dup
aload 0
invokespecial java.lang.Error.<init>:(Ljava/lang/Throwable;)V
athrow
end local 0 14: StackMap locals:
StackMap stack:
return
LocalVariableTable:
Start End Slot Name Signature
2 11 0 k Ljava/lang/Class<*>;
13 14 0 e Ljava/lang/Exception;
Exception table:
from to target type
0 11 12 Class java.lang.Exception
void <init>();
descriptor: ()V
flags: (0x0000)
Code:
stack=4, locals=2, args_size=1
start local 0 0: aload 0
invokespecial java.util.concurrent.SynchronousQueue$Transferer.<init>:()V
1: new java.util.concurrent.SynchronousQueue$TransferQueue$QNode
dup
aconst_null
iconst_0
invokespecial java.util.concurrent.SynchronousQueue$TransferQueue$QNode.<init>:(Ljava/lang/Object;Z)V
astore 1
start local 1 2: aload 0
aload 1
putfield java.util.concurrent.SynchronousQueue$TransferQueue.head:Ljava/util/concurrent/SynchronousQueue$TransferQueue$QNode;
3: aload 0
aload 1
putfield java.util.concurrent.SynchronousQueue$TransferQueue.tail:Ljava/util/concurrent/SynchronousQueue$TransferQueue$QNode;
4: return
end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 5 0 this Ljava/util/concurrent/SynchronousQueue$TransferQueue<TE;>;
2 5 1 h Ljava/util/concurrent/SynchronousQueue$TransferQueue$QNode;
void advanceHead(java.util.concurrent.SynchronousQueue$TransferQueue$QNode, java.util.concurrent.SynchronousQueue$TransferQueue$QNode);
descriptor: (Ljava/util/concurrent/SynchronousQueue$TransferQueue$QNode;Ljava/util/concurrent/SynchronousQueue$TransferQueue$QNode;)V
flags: (0x0000)
Code:
stack=6, locals=3, args_size=3
start local 0 start local 1 start local 2 0: aload 1
aload 0
getfield java.util.concurrent.SynchronousQueue$TransferQueue.head:Ljava/util/concurrent/SynchronousQueue$TransferQueue$QNode;
if_acmpne 3
1: getstatic java.util.concurrent.SynchronousQueue$TransferQueue.UNSAFE:Lsun/misc/Unsafe;
aload 0
getstatic java.util.concurrent.SynchronousQueue$TransferQueue.headOffset:J
aload 1
aload 2
invokevirtual sun.misc.Unsafe.compareAndSwapObject:(Ljava/lang/Object;JLjava/lang/Object;Ljava/lang/Object;)Z
ifeq 3
2: aload 1
aload 1
putfield java.util.concurrent.SynchronousQueue$TransferQueue$QNode.next:Ljava/util/concurrent/SynchronousQueue$TransferQueue$QNode;
3: StackMap locals:
StackMap stack:
return
end local 2 end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 4 0 this Ljava/util/concurrent/SynchronousQueue$TransferQueue<TE;>;
0 4 1 h Ljava/util/concurrent/SynchronousQueue$TransferQueue$QNode;
0 4 2 nh Ljava/util/concurrent/SynchronousQueue$TransferQueue$QNode;
MethodParameters:
Name Flags
h
nh
void advanceTail(java.util.concurrent.SynchronousQueue$TransferQueue$QNode, java.util.concurrent.SynchronousQueue$TransferQueue$QNode);
descriptor: (Ljava/util/concurrent/SynchronousQueue$TransferQueue$QNode;Ljava/util/concurrent/SynchronousQueue$TransferQueue$QNode;)V
flags: (0x0000)
Code:
stack=6, locals=3, args_size=3
start local 0 start local 1 start local 2 0: aload 0
getfield java.util.concurrent.SynchronousQueue$TransferQueue.tail:Ljava/util/concurrent/SynchronousQueue$TransferQueue$QNode;
aload 1
if_acmpne 2
1: getstatic java.util.concurrent.SynchronousQueue$TransferQueue.UNSAFE:Lsun/misc/Unsafe;
aload 0
getstatic java.util.concurrent.SynchronousQueue$TransferQueue.tailOffset:J
aload 1
aload 2
invokevirtual sun.misc.Unsafe.compareAndSwapObject:(Ljava/lang/Object;JLjava/lang/Object;Ljava/lang/Object;)Z
pop
2: StackMap locals:
StackMap stack:
return
end local 2 end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 3 0 this Ljava/util/concurrent/SynchronousQueue$TransferQueue<TE;>;
0 3 1 t Ljava/util/concurrent/SynchronousQueue$TransferQueue$QNode;
0 3 2 nt Ljava/util/concurrent/SynchronousQueue$TransferQueue$QNode;
MethodParameters:
Name Flags
t
nt
boolean casCleanMe(java.util.concurrent.SynchronousQueue$TransferQueue$QNode, java.util.concurrent.SynchronousQueue$TransferQueue$QNode);
descriptor: (Ljava/util/concurrent/SynchronousQueue$TransferQueue$QNode;Ljava/util/concurrent/SynchronousQueue$TransferQueue$QNode;)Z
flags: (0x0000)
Code:
stack=6, locals=3, args_size=3
start local 0 start local 1 start local 2 0: aload 0
getfield java.util.concurrent.SynchronousQueue$TransferQueue.cleanMe:Ljava/util/concurrent/SynchronousQueue$TransferQueue$QNode;
aload 1
if_acmpne 3
1: getstatic java.util.concurrent.SynchronousQueue$TransferQueue.UNSAFE:Lsun/misc/Unsafe;
aload 0
getstatic java.util.concurrent.SynchronousQueue$TransferQueue.cleanMeOffset:J
aload 1
aload 2
invokevirtual sun.misc.Unsafe.compareAndSwapObject:(Ljava/lang/Object;JLjava/lang/Object;Ljava/lang/Object;)Z
ifeq 3
2: iconst_1
ireturn
StackMap locals:
StackMap stack:
3: iconst_0
ireturn
end local 2 end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 4 0 this Ljava/util/concurrent/SynchronousQueue$TransferQueue<TE;>;
0 4 1 cmp Ljava/util/concurrent/SynchronousQueue$TransferQueue$QNode;
0 4 2 val Ljava/util/concurrent/SynchronousQueue$TransferQueue$QNode;
MethodParameters:
Name Flags
cmp
val
E transfer(E, boolean, );
descriptor: (Ljava/lang/Object;ZJ)Ljava/lang/Object;
flags: (0x0000)
Code:
stack=6, locals=11, args_size=4
start local 0 start local 1 start local 2 start local 3 0: aconst_null
astore 5
start local 5 1: aload 1
ifnull 2
iconst_1
goto 3
StackMap locals: java.util.concurrent.SynchronousQueue$TransferQueue$QNode
StackMap stack:
2: iconst_0
StackMap locals:
StackMap stack: int
3: istore 6
start local 6 4: StackMap locals: int
StackMap stack:
aload 0
getfield java.util.concurrent.SynchronousQueue$TransferQueue.tail:Ljava/util/concurrent/SynchronousQueue$TransferQueue$QNode;
astore 7
start local 7 5: aload 0
getfield java.util.concurrent.SynchronousQueue$TransferQueue.head:Ljava/util/concurrent/SynchronousQueue$TransferQueue$QNode;
astore 8
start local 8 6: aload 7
ifnull 4
aload 8
ifnonnull 8
7: goto 4
8: StackMap locals: java.util.concurrent.SynchronousQueue$TransferQueue$QNode java.util.concurrent.SynchronousQueue$TransferQueue$QNode
StackMap stack:
aload 8
aload 7
if_acmpeq 9
aload 7
getfield java.util.concurrent.SynchronousQueue$TransferQueue$QNode.isData:Z
iload 6
if_icmpne 34
9: StackMap locals:
StackMap stack:
aload 7
getfield java.util.concurrent.SynchronousQueue$TransferQueue$QNode.next:Ljava/util/concurrent/SynchronousQueue$TransferQueue$QNode;
astore 9
start local 9 10: aload 7
aload 0
getfield java.util.concurrent.SynchronousQueue$TransferQueue.tail:Ljava/util/concurrent/SynchronousQueue$TransferQueue$QNode;
if_acmpeq 12
11: goto 4
12: StackMap locals: java.util.concurrent.SynchronousQueue$TransferQueue$QNode
StackMap stack:
aload 9
ifnull 15
13: aload 0
aload 7
aload 9
invokevirtual java.util.concurrent.SynchronousQueue$TransferQueue.advanceTail:(Ljava/util/concurrent/SynchronousQueue$TransferQueue$QNode;Ljava/util/concurrent/SynchronousQueue$TransferQueue$QNode;)V
14: goto 4
15: StackMap locals:
StackMap stack:
iload 2
ifeq 17
lload 3
lconst_0
lcmp
ifgt 17
16: aconst_null
areturn
17: StackMap locals:
StackMap stack:
aload 5
ifnonnull 19
18: new java.util.concurrent.SynchronousQueue$TransferQueue$QNode
dup
aload 1
iload 6
invokespecial java.util.concurrent.SynchronousQueue$TransferQueue$QNode.<init>:(Ljava/lang/Object;Z)V
astore 5
19: StackMap locals:
StackMap stack:
aload 7
aconst_null
aload 5
invokevirtual java.util.concurrent.SynchronousQueue$TransferQueue$QNode.casNext:(Ljava/util/concurrent/SynchronousQueue$TransferQueue$QNode;Ljava/util/concurrent/SynchronousQueue$TransferQueue$QNode;)Z
ifne 21
20: goto 4
21: StackMap locals:
StackMap stack:
aload 0
aload 7
aload 5
invokevirtual java.util.concurrent.SynchronousQueue$TransferQueue.advanceTail:(Ljava/util/concurrent/SynchronousQueue$TransferQueue$QNode;Ljava/util/concurrent/SynchronousQueue$TransferQueue$QNode;)V
22: aload 0
aload 5
aload 1
iload 2
lload 3
invokevirtual java.util.concurrent.SynchronousQueue$TransferQueue.awaitFulfill:(Ljava/util/concurrent/SynchronousQueue$TransferQueue$QNode;Ljava/lang/Object;ZJ)Ljava/lang/Object;
astore 10
start local 10 23: aload 10
aload 5
if_acmpne 26
24: aload 0
aload 7
aload 5
invokevirtual java.util.concurrent.SynchronousQueue$TransferQueue.clean:(Ljava/util/concurrent/SynchronousQueue$TransferQueue$QNode;Ljava/util/concurrent/SynchronousQueue$TransferQueue$QNode;)V
25: aconst_null
areturn
26: StackMap locals: java.lang.Object
StackMap stack:
aload 5
invokevirtual java.util.concurrent.SynchronousQueue$TransferQueue$QNode.isOffList:()Z
ifne 31
27: aload 0
aload 7
aload 5
invokevirtual java.util.concurrent.SynchronousQueue$TransferQueue.advanceHead:(Ljava/util/concurrent/SynchronousQueue$TransferQueue$QNode;Ljava/util/concurrent/SynchronousQueue$TransferQueue$QNode;)V
28: aload 10
ifnull 30
29: aload 5
aload 5
putfield java.util.concurrent.SynchronousQueue$TransferQueue$QNode.item:Ljava/lang/Object;
30: StackMap locals:
StackMap stack:
aload 5
aconst_null
putfield java.util.concurrent.SynchronousQueue$TransferQueue$QNode.waiter:Ljava/lang/Thread;
31: StackMap locals:
StackMap stack:
aload 10
ifnull 32
aload 10
goto 33
StackMap locals:
StackMap stack:
32: aload 1
StackMap locals:
StackMap stack: java.lang.Object
33: areturn
end local 10 end local 9 34: StackMap locals:
StackMap stack:
aload 8
getfield java.util.concurrent.SynchronousQueue$TransferQueue$QNode.next:Ljava/util/concurrent/SynchronousQueue$TransferQueue$QNode;
astore 9
start local 9 35: aload 7
aload 0
getfield java.util.concurrent.SynchronousQueue$TransferQueue.tail:Ljava/util/concurrent/SynchronousQueue$TransferQueue$QNode;
if_acmpne 4
aload 9
ifnull 4
aload 8
aload 0
getfield java.util.concurrent.SynchronousQueue$TransferQueue.head:Ljava/util/concurrent/SynchronousQueue$TransferQueue$QNode;
if_acmpeq 37
36: goto 4
37: StackMap locals: java.util.concurrent.SynchronousQueue$TransferQueue$QNode
StackMap stack:
aload 9
getfield java.util.concurrent.SynchronousQueue$TransferQueue$QNode.item:Ljava/lang/Object;
astore 10
start local 10 38: iload 6
aload 10
ifnull 39
iconst_1
goto 40
StackMap locals: java.util.concurrent.SynchronousQueue$TransferQueue java.lang.Object int long java.util.concurrent.SynchronousQueue$TransferQueue$QNode int java.util.concurrent.SynchronousQueue$TransferQueue$QNode java.util.concurrent.SynchronousQueue$TransferQueue$QNode java.util.concurrent.SynchronousQueue$TransferQueue$QNode java.lang.Object
StackMap stack: int
39: iconst_0
StackMap locals: java.util.concurrent.SynchronousQueue$TransferQueue java.lang.Object int long java.util.concurrent.SynchronousQueue$TransferQueue$QNode int java.util.concurrent.SynchronousQueue$TransferQueue$QNode java.util.concurrent.SynchronousQueue$TransferQueue$QNode java.util.concurrent.SynchronousQueue$TransferQueue$QNode java.lang.Object
StackMap stack: int int
40: if_icmpeq 43
41: aload 10
aload 9
if_acmpeq 43
42: aload 9
aload 10
aload 1
invokevirtual java.util.concurrent.SynchronousQueue$TransferQueue$QNode.casItem:(Ljava/lang/Object;Ljava/lang/Object;)Z
ifne 45
43: StackMap locals:
StackMap stack:
aload 0
aload 8
aload 9
invokevirtual java.util.concurrent.SynchronousQueue$TransferQueue.advanceHead:(Ljava/util/concurrent/SynchronousQueue$TransferQueue$QNode;Ljava/util/concurrent/SynchronousQueue$TransferQueue$QNode;)V
44: goto 4
45: StackMap locals:
StackMap stack:
aload 0
aload 8
aload 9
invokevirtual java.util.concurrent.SynchronousQueue$TransferQueue.advanceHead:(Ljava/util/concurrent/SynchronousQueue$TransferQueue$QNode;Ljava/util/concurrent/SynchronousQueue$TransferQueue$QNode;)V
46: aload 9
getfield java.util.concurrent.SynchronousQueue$TransferQueue$QNode.waiter:Ljava/lang/Thread;
invokestatic java.util.concurrent.locks.LockSupport.unpark:(Ljava/lang/Thread;)V
47: aload 10
ifnull 48
aload 10
goto 49
StackMap locals:
StackMap stack:
48: aload 1
StackMap locals:
StackMap stack: java.lang.Object
49: areturn
end local 10 end local 9 end local 8 end local 7 end local 6 end local 5 end local 3 end local 2 end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 50 0 this Ljava/util/concurrent/SynchronousQueue$TransferQueue<TE;>;
0 50 1 e TE;
0 50 2 timed Z
0 50 3 nanos J
1 50 5 s Ljava/util/concurrent/SynchronousQueue$TransferQueue$QNode;
4 50 6 isData Z
5 50 7 t Ljava/util/concurrent/SynchronousQueue$TransferQueue$QNode;
6 50 8 h Ljava/util/concurrent/SynchronousQueue$TransferQueue$QNode;
10 34 9 tn Ljava/util/concurrent/SynchronousQueue$TransferQueue$QNode;
23 34 10 x Ljava/lang/Object;
35 50 9 m Ljava/util/concurrent/SynchronousQueue$TransferQueue$QNode;
38 50 10 x Ljava/lang/Object;
Signature: (TE;ZJ)TE;
MethodParameters:
Name Flags
e
timed
nanos
awaitFulfill(java.util.concurrent.SynchronousQueue$TransferQueue$QNode, E, boolean, long);
descriptor: (Ljava/util/concurrent/SynchronousQueue$TransferQueue$QNode;Ljava/lang/Object;ZJ)Ljava/lang/Object;
flags: (0x0000)
Code:
stack=4, locals=11, args_size=5
start local 0 start local 1 start local 2 start local 3 start local 4 0: iload 3
ifeq 1
invokestatic java.lang.System.nanoTime:()J
lload 4
ladd
goto 2
StackMap locals:
StackMap stack:
1: lconst_0
StackMap locals:
StackMap stack: long
2: lstore 6
start local 6 3: invokestatic java.lang.Thread.currentThread:()Ljava/lang/Thread;
astore 8
start local 8 4: aload 0
getfield java.util.concurrent.SynchronousQueue$TransferQueue.head:Ljava/util/concurrent/SynchronousQueue$TransferQueue$QNode;
getfield java.util.concurrent.SynchronousQueue$TransferQueue$QNode.next:Ljava/util/concurrent/SynchronousQueue$TransferQueue$QNode;
aload 1
if_acmpne 7
5: iload 3
ifeq 6
getstatic java.util.concurrent.SynchronousQueue.maxTimedSpins:I
goto 8
StackMap locals: long java.lang.Thread
StackMap stack:
6: getstatic java.util.concurrent.SynchronousQueue.maxUntimedSpins:I
goto 8
StackMap locals:
StackMap stack:
7: iconst_0
8: StackMap locals:
StackMap stack: int
istore 9
start local 9 9: StackMap locals: int
StackMap stack:
aload 8
invokevirtual java.lang.Thread.isInterrupted:()Z
ifeq 11
10: aload 1
aload 2
invokevirtual java.util.concurrent.SynchronousQueue$TransferQueue$QNode.tryCancel:(Ljava/lang/Object;)V
11: StackMap locals:
StackMap stack:
aload 1
getfield java.util.concurrent.SynchronousQueue$TransferQueue$QNode.item:Ljava/lang/Object;
astore 10
start local 10 12: aload 10
aload 2
if_acmpeq 14
13: aload 10
areturn
14: StackMap locals: java.lang.Object
StackMap stack:
iload 3
ifeq 19
15: lload 6
invokestatic java.lang.System.nanoTime:()J
lsub
lstore 4
16: lload 4
lconst_0
lcmp
ifgt 19
17: aload 1
aload 2
invokevirtual java.util.concurrent.SynchronousQueue$TransferQueue$QNode.tryCancel:(Ljava/lang/Object;)V
18: goto 9
19: StackMap locals:
StackMap stack:
iload 9
ifle 21
20: iinc 9 -1
goto 9
21: StackMap locals:
StackMap stack:
aload 1
getfield java.util.concurrent.SynchronousQueue$TransferQueue$QNode.waiter:Ljava/lang/Thread;
ifnonnull 23
22: aload 1
aload 8
putfield java.util.concurrent.SynchronousQueue$TransferQueue$QNode.waiter:Ljava/lang/Thread;
goto 9
23: StackMap locals:
StackMap stack:
iload 3
ifne 25
24: aload 0
invokestatic java.util.concurrent.locks.LockSupport.park:(Ljava/lang/Object;)V
goto 9
25: StackMap locals:
StackMap stack:
lload 4
ldc 1000
lcmp
ifle 9
26: aload 0
lload 4
invokestatic java.util.concurrent.locks.LockSupport.parkNanos:(Ljava/lang/Object;J)V
end local 10 27: goto 9
end local 9 end local 8 end local 6 end local 4 end local 3 end local 2 end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 28 0 this Ljava/util/concurrent/SynchronousQueue$TransferQueue<TE;>;
0 28 1 s Ljava/util/concurrent/SynchronousQueue$TransferQueue$QNode;
0 28 2 e TE;
0 28 3 timed Z
0 28 4 nanos J
3 28 6 deadline J
4 28 8 w Ljava/lang/Thread;
9 28 9 spins I
12 27 10 x Ljava/lang/Object;
Signature: (Ljava/util/concurrent/SynchronousQueue$TransferQueue$QNode;TE;ZJ)Ljava/lang/Object;
MethodParameters:
Name Flags
s
e
timed
nanos
void clean(java.util.concurrent.SynchronousQueue$TransferQueue$QNode, java.util.concurrent.SynchronousQueue$TransferQueue$QNode);
descriptor: (Ljava/util/concurrent/SynchronousQueue$TransferQueue$QNode;Ljava/util/concurrent/SynchronousQueue$TransferQueue$QNode;)V
flags: (0x0000)
Code:
stack=3, locals=10, args_size=3
start local 0 start local 1 start local 2 0: aload 2
aconst_null
putfield java.util.concurrent.SynchronousQueue$TransferQueue$QNode.waiter:Ljava/lang/Thread;
1: goto 36
2: StackMap locals:
StackMap stack:
aload 0
getfield java.util.concurrent.SynchronousQueue$TransferQueue.head:Ljava/util/concurrent/SynchronousQueue$TransferQueue$QNode;
astore 3
start local 3 3: aload 3
getfield java.util.concurrent.SynchronousQueue$TransferQueue$QNode.next:Ljava/util/concurrent/SynchronousQueue$TransferQueue$QNode;
astore 4
start local 4 4: aload 4
ifnull 7
aload 4
invokevirtual java.util.concurrent.SynchronousQueue$TransferQueue$QNode.isCancelled:()Z
ifeq 7
5: aload 0
aload 3
aload 4
invokevirtual java.util.concurrent.SynchronousQueue$TransferQueue.advanceHead:(Ljava/util/concurrent/SynchronousQueue$TransferQueue$QNode;Ljava/util/concurrent/SynchronousQueue$TransferQueue$QNode;)V
6: goto 36
7: StackMap locals: java.util.concurrent.SynchronousQueue$TransferQueue$QNode java.util.concurrent.SynchronousQueue$TransferQueue$QNode
StackMap stack:
aload 0
getfield java.util.concurrent.SynchronousQueue$TransferQueue.tail:Ljava/util/concurrent/SynchronousQueue$TransferQueue$QNode;
astore 5
start local 5 8: aload 5
aload 3
if_acmpne 10
9: return
10: StackMap locals: java.util.concurrent.SynchronousQueue$TransferQueue$QNode
StackMap stack:
aload 5
getfield java.util.concurrent.SynchronousQueue$TransferQueue$QNode.next:Ljava/util/concurrent/SynchronousQueue$TransferQueue$QNode;
astore 6
start local 6 11: aload 5
aload 0
getfield java.util.concurrent.SynchronousQueue$TransferQueue.tail:Ljava/util/concurrent/SynchronousQueue$TransferQueue$QNode;
if_acmpeq 13
12: goto 36
13: StackMap locals: java.util.concurrent.SynchronousQueue$TransferQueue$QNode
StackMap stack:
aload 6
ifnull 16
14: aload 0
aload 5
aload 6
invokevirtual java.util.concurrent.SynchronousQueue$TransferQueue.advanceTail:(Ljava/util/concurrent/SynchronousQueue$TransferQueue$QNode;Ljava/util/concurrent/SynchronousQueue$TransferQueue$QNode;)V
15: goto 36
16: StackMap locals:
StackMap stack:
aload 2
aload 5
if_acmpeq 20
17: aload 2
getfield java.util.concurrent.SynchronousQueue$TransferQueue$QNode.next:Ljava/util/concurrent/SynchronousQueue$TransferQueue$QNode;
astore 7
start local 7 18: aload 7
aload 2
if_acmpeq 19
aload 1
aload 2
aload 7
invokevirtual java.util.concurrent.SynchronousQueue$TransferQueue$QNode.casNext:(Ljava/util/concurrent/SynchronousQueue$TransferQueue$QNode;Ljava/util/concurrent/SynchronousQueue$TransferQueue$QNode;)Z
ifeq 20
19: StackMap locals: java.util.concurrent.SynchronousQueue$TransferQueue$QNode
StackMap stack:
return
end local 7 20: StackMap locals:
StackMap stack:
aload 0
getfield java.util.concurrent.SynchronousQueue$TransferQueue.cleanMe:Ljava/util/concurrent/SynchronousQueue$TransferQueue$QNode;
astore 7
start local 7 21: aload 7
ifnull 34
22: aload 7
getfield java.util.concurrent.SynchronousQueue$TransferQueue$QNode.next:Ljava/util/concurrent/SynchronousQueue$TransferQueue$QNode;
astore 8
start local 8 23: aload 8
ifnull 31
24: aload 8
aload 7
if_acmpeq 31
25: aload 8
invokevirtual java.util.concurrent.SynchronousQueue$TransferQueue$QNode.isCancelled:()Z
ifeq 31
26: aload 8
aload 5
if_acmpeq 32
27: aload 8
getfield java.util.concurrent.SynchronousQueue$TransferQueue$QNode.next:Ljava/util/concurrent/SynchronousQueue$TransferQueue$QNode;
dup
astore 9
start local 9 28: ifnull 32
29: aload 9
aload 8
if_acmpeq 32
30: aload 7
aload 8
aload 9
invokevirtual java.util.concurrent.SynchronousQueue$TransferQueue$QNode.casNext:(Ljava/util/concurrent/SynchronousQueue$TransferQueue$QNode;Ljava/util/concurrent/SynchronousQueue$TransferQueue$QNode;)Z
ifeq 32
end local 9 31: StackMap locals: java.util.concurrent.SynchronousQueue$TransferQueue$QNode java.util.concurrent.SynchronousQueue$TransferQueue$QNode
StackMap stack:
aload 0
aload 7
aconst_null
invokevirtual java.util.concurrent.SynchronousQueue$TransferQueue.casCleanMe:(Ljava/util/concurrent/SynchronousQueue$TransferQueue$QNode;Ljava/util/concurrent/SynchronousQueue$TransferQueue$QNode;)Z
pop
32: StackMap locals:
StackMap stack:
aload 7
aload 1
if_acmpne 36
33: return
end local 8 34: StackMap locals:
StackMap stack:
aload 0
aconst_null
aload 1
invokevirtual java.util.concurrent.SynchronousQueue$TransferQueue.casCleanMe:(Ljava/util/concurrent/SynchronousQueue$TransferQueue$QNode;Ljava/util/concurrent/SynchronousQueue$TransferQueue$QNode;)Z
ifeq 36
35: return
end local 7 end local 6 end local 5 end local 4 end local 3 36: StackMap locals: java.util.concurrent.SynchronousQueue$TransferQueue java.util.concurrent.SynchronousQueue$TransferQueue$QNode java.util.concurrent.SynchronousQueue$TransferQueue$QNode
StackMap stack:
aload 1
getfield java.util.concurrent.SynchronousQueue$TransferQueue$QNode.next:Ljava/util/concurrent/SynchronousQueue$TransferQueue$QNode;
aload 2
if_acmpeq 2
37: return
end local 2 end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 38 0 this Ljava/util/concurrent/SynchronousQueue$TransferQueue<TE;>;
0 38 1 pred Ljava/util/concurrent/SynchronousQueue$TransferQueue$QNode;
0 38 2 s Ljava/util/concurrent/SynchronousQueue$TransferQueue$QNode;
3 36 3 h Ljava/util/concurrent/SynchronousQueue$TransferQueue$QNode;
4 36 4 hn Ljava/util/concurrent/SynchronousQueue$TransferQueue$QNode;
8 36 5 t Ljava/util/concurrent/SynchronousQueue$TransferQueue$QNode;
11 36 6 tn Ljava/util/concurrent/SynchronousQueue$TransferQueue$QNode;
18 20 7 sn Ljava/util/concurrent/SynchronousQueue$TransferQueue$QNode;
21 36 7 dp Ljava/util/concurrent/SynchronousQueue$TransferQueue$QNode;
23 34 8 d Ljava/util/concurrent/SynchronousQueue$TransferQueue$QNode;
28 31 9 dn Ljava/util/concurrent/SynchronousQueue$TransferQueue$QNode;
MethodParameters:
Name Flags
pred
s
}
Signature: <E:Ljava/lang/Object;>Ljava/util/concurrent/SynchronousQueue$Transferer<TE;>;
SourceFile: "SynchronousQueue.java"
NestHost: java.util.concurrent.SynchronousQueue
InnerClasses:
final TransferQueue = java.util.concurrent.SynchronousQueue$TransferQueue of java.util.concurrent.SynchronousQueue
final QNode = java.util.concurrent.SynchronousQueue$TransferQueue$QNode of java.util.concurrent.SynchronousQueue$TransferQueue
abstract Transferer = java.util.concurrent.SynchronousQueue$Transferer of java.util.concurrent.SynchronousQueue