public class java.util.concurrent.Exchanger<V>
minor version: 0
major version: 59
flags: flags: (0x0021) ACC_PUBLIC, ACC_SUPER
this_class: java.util.concurrent.Exchanger
super_class: java.lang.Object
{
private static final int ASHIFT;
descriptor: I
flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
ConstantValue: 7
private static final int MMASK;
descriptor: I
flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
ConstantValue: 255
private static final int SEQ;
descriptor: I
flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
ConstantValue: 256
private static final int NCPU;
descriptor: I
flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
static final int FULL;
descriptor: I
flags: (0x0018) ACC_STATIC, ACC_FINAL
private static final int SPINS;
descriptor: I
flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
ConstantValue: 1024
private static final java.lang.Object NULL_ITEM;
descriptor: Ljava/lang/Object;
flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
private static final java.lang.Object TIMED_OUT;
descriptor: Ljava/lang/Object;
flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
private final java.util.concurrent.Exchanger$Participant participant;
descriptor: Ljava/util/concurrent/Exchanger$Participant;
flags: (0x0012) ACC_PRIVATE, ACC_FINAL
private volatile java.util.concurrent.Exchanger$Node[] arena;
descriptor: [Ljava/util/concurrent/Exchanger$Node;
flags: (0x0042) ACC_PRIVATE, ACC_VOLATILE
private volatile java.util.concurrent.Exchanger$Node slot;
descriptor: Ljava/util/concurrent/Exchanger$Node;
flags: (0x0042) ACC_PRIVATE, ACC_VOLATILE
private volatile int bound;
descriptor: I
flags: (0x0042) ACC_PRIVATE, ACC_VOLATILE
private static final sun.misc.Unsafe U;
descriptor: Lsun/misc/Unsafe;
flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
private static final long BOUND;
descriptor: J
flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
private static final long SLOT;
descriptor: J
flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
private static final long MATCH;
descriptor: J
flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
private static final long BLOCKER;
descriptor: J
flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
private static final int ABASE;
descriptor: I
flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
static void <clinit>();
descriptor: ()V
flags: (0x0008) ACC_STATIC
Code:
stack=3, locals=5, args_size=0
0: invokestatic java.lang.Runtime.getRuntime:()Ljava/lang/Runtime;
invokevirtual java.lang.Runtime.availableProcessors:()I
putstatic java.util.concurrent.Exchanger.NCPU:I
1: getstatic java.util.concurrent.Exchanger.NCPU:I
sipush 510
if_icmplt 2
sipush 255
goto 3
StackMap locals:
StackMap stack:
2: getstatic java.util.concurrent.Exchanger.NCPU:I
iconst_1
iushr
StackMap locals:
StackMap stack: int
3: putstatic java.util.concurrent.Exchanger.FULL:I
4: new java.lang.Object
dup
invokespecial java.lang.Object.<init>:()V
putstatic java.util.concurrent.Exchanger.NULL_ITEM:Ljava/lang/Object;
5: new java.lang.Object
dup
invokespecial java.lang.Object.<init>:()V
putstatic java.util.concurrent.Exchanger.TIMED_OUT:Ljava/lang/Object;
6: invokestatic sun.misc.Unsafe.getUnsafe:()Lsun/misc/Unsafe;
putstatic java.util.concurrent.Exchanger.U:Lsun/misc/Unsafe;
7: ldc Ljava/util/concurrent/Exchanger;
astore 1
start local 1 8: ldc Ljava/util/concurrent/Exchanger$Node;
astore 2
start local 2 9: ldc [Ljava/util/concurrent/Exchanger$Node;
astore 3
start local 3 10: ldc Ljava/lang/Thread;
astore 4
start local 4 11: getstatic java.util.concurrent.Exchanger.U:Lsun/misc/Unsafe;
12: aload 1
ldc "bound"
invokevirtual java.lang.Class.getDeclaredField:(Ljava/lang/String;)Ljava/lang/reflect/Field;
13: invokevirtual sun.misc.Unsafe.objectFieldOffset:(Ljava/lang/reflect/Field;)J
putstatic java.util.concurrent.Exchanger.BOUND:J
14: getstatic java.util.concurrent.Exchanger.U:Lsun/misc/Unsafe;
15: aload 1
ldc "slot"
invokevirtual java.lang.Class.getDeclaredField:(Ljava/lang/String;)Ljava/lang/reflect/Field;
16: invokevirtual sun.misc.Unsafe.objectFieldOffset:(Ljava/lang/reflect/Field;)J
putstatic java.util.concurrent.Exchanger.SLOT:J
17: getstatic java.util.concurrent.Exchanger.U:Lsun/misc/Unsafe;
18: aload 2
ldc "match"
invokevirtual java.lang.Class.getDeclaredField:(Ljava/lang/String;)Ljava/lang/reflect/Field;
19: invokevirtual sun.misc.Unsafe.objectFieldOffset:(Ljava/lang/reflect/Field;)J
putstatic java.util.concurrent.Exchanger.MATCH:J
20: getstatic java.util.concurrent.Exchanger.U:Lsun/misc/Unsafe;
21: aload 4
ldc "parkBlocker"
invokevirtual java.lang.Class.getDeclaredField:(Ljava/lang/String;)Ljava/lang/reflect/Field;
22: invokevirtual sun.misc.Unsafe.objectFieldOffset:(Ljava/lang/reflect/Field;)J
putstatic java.util.concurrent.Exchanger.BLOCKER:J
23: getstatic java.util.concurrent.Exchanger.U:Lsun/misc/Unsafe;
aload 3
invokevirtual sun.misc.Unsafe.arrayIndexScale:(Ljava/lang/Class;)I
istore 0
start local 0 24: getstatic java.util.concurrent.Exchanger.U:Lsun/misc/Unsafe;
aload 3
invokevirtual sun.misc.Unsafe.arrayBaseOffset:(Ljava/lang/Class;)I
sipush 128
iadd
putstatic java.util.concurrent.Exchanger.ABASE:I
end local 4 end local 3 end local 2 end local 1 25: goto 28
end local 0 StackMap locals:
StackMap stack: java.lang.Exception
26: astore 1
start local 1 27: new java.lang.Error
dup
aload 1
invokespecial java.lang.Error.<init>:(Ljava/lang/Throwable;)V
athrow
end local 1 start local 0 28: StackMap locals: int
StackMap stack:
iload 0
iload 0
iconst_1
isub
iand
ifne 29
iload 0
sipush 128
if_icmple 30
29: StackMap locals:
StackMap stack:
new java.lang.Error
dup
ldc "Unsupported array scale"
invokespecial java.lang.Error.<init>:(Ljava/lang/String;)V
athrow
end local 0 30: StackMap locals:
StackMap stack:
return
LocalVariableTable:
Start End Slot Name Signature
24 26 0 s I
28 30 0 s I
8 25 1 ek Ljava/lang/Class<*>;
9 25 2 nk Ljava/lang/Class<*>;
10 25 3 ak Ljava/lang/Class<*>;
11 25 4 tk Ljava/lang/Class<*>;
27 28 1 e Ljava/lang/Exception;
Exception table:
from to target type
6 25 26 Class java.lang.Exception
private final java.lang.Object arenaExchange(java.lang.Object, boolean, long);
descriptor: (Ljava/lang/Object;ZJ)Ljava/lang/Object;
flags: (0x0012) ACC_PRIVATE, ACC_FINAL
Code:
stack=7, locals=20, args_size=4
start local 0 start local 1 start local 2 start local 3 0: aload 0
getfield java.util.concurrent.Exchanger.arena:[Ljava/util/concurrent/Exchanger$Node;
astore 5
start local 5 1: aload 0
getfield java.util.concurrent.Exchanger.participant:Ljava/util/concurrent/Exchanger$Participant;
invokevirtual java.util.concurrent.Exchanger$Participant.get:()Ljava/lang/Object;
checkcast java.util.concurrent.Exchanger$Node
astore 6
start local 6 2: aload 6
getfield java.util.concurrent.Exchanger$Node.index:I
istore 7
start local 7 3: StackMap locals: java.util.concurrent.Exchanger$Node[] java.util.concurrent.Exchanger$Node int
StackMap stack:
getstatic java.util.concurrent.Exchanger.U:Lsun/misc/Unsafe;
aload 5
iload 7
bipush 7
ishl
getstatic java.util.concurrent.Exchanger.ABASE:I
iadd
i2l
dup2
lstore 11
start local 11 4: invokevirtual sun.misc.Unsafe.getObjectVolatile:(Ljava/lang/Object;J)Ljava/lang/Object;
checkcast java.util.concurrent.Exchanger$Node
astore 13
start local 13 5: aload 13
ifnull 12
getstatic java.util.concurrent.Exchanger.U:Lsun/misc/Unsafe;
aload 5
lload 11
aload 13
aconst_null
invokevirtual sun.misc.Unsafe.compareAndSwapObject:(Ljava/lang/Object;JLjava/lang/Object;Ljava/lang/Object;)Z
ifeq 12
6: aload 13
getfield java.util.concurrent.Exchanger$Node.item:Ljava/lang/Object;
astore 14
start local 14 7: aload 13
aload 1
putfield java.util.concurrent.Exchanger$Node.match:Ljava/lang/Object;
8: aload 13
getfield java.util.concurrent.Exchanger$Node.parked:Ljava/lang/Thread;
astore 15
start local 15 9: aload 15
ifnull 11
10: getstatic java.util.concurrent.Exchanger.U:Lsun/misc/Unsafe;
aload 15
invokevirtual sun.misc.Unsafe.unpark:(Ljava/lang/Object;)V
11: StackMap locals: java.util.concurrent.Exchanger java.lang.Object int long java.util.concurrent.Exchanger$Node[] java.util.concurrent.Exchanger$Node int top top top long java.util.concurrent.Exchanger$Node java.lang.Object java.lang.Thread
StackMap stack:
aload 14
areturn
end local 15 end local 14 12: StackMap locals:
StackMap stack:
iload 7
aload 0
getfield java.util.concurrent.Exchanger.bound:I
dup
istore 8
start local 8 13: sipush 255
iand
dup
istore 9
start local 9 14: if_icmpgt 62
aload 13
ifnonnull 62
15: aload 6
aload 1
putfield java.util.concurrent.Exchanger$Node.item:Ljava/lang/Object;
16: getstatic java.util.concurrent.Exchanger.U:Lsun/misc/Unsafe;
aload 5
lload 11
aconst_null
aload 6
invokevirtual sun.misc.Unsafe.compareAndSwapObject:(Ljava/lang/Object;JLjava/lang/Object;Ljava/lang/Object;)Z
ifeq 60
17: iload 2
ifeq 18
iload 9
ifne 18
invokestatic java.lang.System.nanoTime:()J
lload 3
ladd
goto 19
StackMap locals: java.util.concurrent.Exchanger java.lang.Object int long java.util.concurrent.Exchanger$Node[] java.util.concurrent.Exchanger$Node int int int top long java.util.concurrent.Exchanger$Node
StackMap stack:
18: lconst_0
StackMap locals:
StackMap stack: long
19: lstore 14
start local 14 20: invokestatic java.lang.Thread.currentThread:()Ljava/lang/Thread;
astore 16
start local 16 21: aload 6
getfield java.util.concurrent.Exchanger$Node.hash:I
istore 17
start local 17 22: sipush 1024
istore 18
start local 18 23: StackMap locals: java.util.concurrent.Exchanger java.lang.Object int long java.util.concurrent.Exchanger$Node[] java.util.concurrent.Exchanger$Node int int int top long java.util.concurrent.Exchanger$Node long java.lang.Thread int int
StackMap stack:
aload 6
getfield java.util.concurrent.Exchanger$Node.match:Ljava/lang/Object;
astore 19
start local 19 24: aload 19
ifnull 29
25: getstatic java.util.concurrent.Exchanger.U:Lsun/misc/Unsafe;
aload 6
getstatic java.util.concurrent.Exchanger.MATCH:J
aconst_null
invokevirtual sun.misc.Unsafe.putOrderedObject:(Ljava/lang/Object;JLjava/lang/Object;)V
26: aload 6
aconst_null
putfield java.util.concurrent.Exchanger$Node.item:Ljava/lang/Object;
27: aload 6
iload 17
putfield java.util.concurrent.Exchanger$Node.hash:I
28: aload 19
areturn
29: StackMap locals: java.lang.Object
StackMap stack:
iload 18
ifle 37
30: iload 17
iload 17
iconst_1
ishl
ixor
istore 17
iload 17
iload 17
iconst_3
iushr
ixor
istore 17
iload 17
iload 17
bipush 10
ishl
ixor
istore 17
31: iload 17
ifne 33
32: sipush 1024
aload 16
invokevirtual java.lang.Thread.getId:()J
l2i
ior
istore 17
goto 23
33: StackMap locals:
StackMap stack:
iload 17
ifge 23
34: iinc 18 -1
iload 18
sipush 511
iand
ifne 23
35: invokestatic java.lang.Thread.yield:()V
36: goto 23
37: StackMap locals:
StackMap stack:
getstatic java.util.concurrent.Exchanger.U:Lsun/misc/Unsafe;
aload 5
lload 11
invokevirtual sun.misc.Unsafe.getObjectVolatile:(Ljava/lang/Object;J)Ljava/lang/Object;
aload 6
if_acmpeq 39
38: sipush 1024
istore 18
goto 23
39: StackMap locals:
StackMap stack:
aload 16
invokevirtual java.lang.Thread.isInterrupted:()Z
ifne 49
iload 9
ifne 49
40: iload 2
ifeq 42
41: lload 14
invokestatic java.lang.System.nanoTime:()J
lsub
dup2
lstore 3
lconst_0
lcmp
ifle 49
42: StackMap locals:
StackMap stack:
getstatic java.util.concurrent.Exchanger.U:Lsun/misc/Unsafe;
aload 16
getstatic java.util.concurrent.Exchanger.BLOCKER:J
aload 0
invokevirtual sun.misc.Unsafe.putObject:(Ljava/lang/Object;JLjava/lang/Object;)V
43: aload 6
aload 16
putfield java.util.concurrent.Exchanger$Node.parked:Ljava/lang/Thread;
44: getstatic java.util.concurrent.Exchanger.U:Lsun/misc/Unsafe;
aload 5
lload 11
invokevirtual sun.misc.Unsafe.getObjectVolatile:(Ljava/lang/Object;J)Ljava/lang/Object;
aload 6
if_acmpne 46
45: getstatic java.util.concurrent.Exchanger.U:Lsun/misc/Unsafe;
iconst_0
lload 3
invokevirtual sun.misc.Unsafe.park:(ZJ)V
46: StackMap locals:
StackMap stack:
aload 6
aconst_null
putfield java.util.concurrent.Exchanger$Node.parked:Ljava/lang/Thread;
47: getstatic java.util.concurrent.Exchanger.U:Lsun/misc/Unsafe;
aload 16
getstatic java.util.concurrent.Exchanger.BLOCKER:J
aconst_null
invokevirtual sun.misc.Unsafe.putObject:(Ljava/lang/Object;JLjava/lang/Object;)V
48: goto 23
49: StackMap locals:
StackMap stack:
getstatic java.util.concurrent.Exchanger.U:Lsun/misc/Unsafe;
aload 5
lload 11
invokevirtual sun.misc.Unsafe.getObjectVolatile:(Ljava/lang/Object;J)Ljava/lang/Object;
aload 6
if_acmpne 23
50: getstatic java.util.concurrent.Exchanger.U:Lsun/misc/Unsafe;
aload 5
lload 11
aload 6
aconst_null
invokevirtual sun.misc.Unsafe.compareAndSwapObject:(Ljava/lang/Object;JLjava/lang/Object;Ljava/lang/Object;)Z
ifeq 23
51: iload 9
ifeq 53
52: getstatic java.util.concurrent.Exchanger.U:Lsun/misc/Unsafe;
aload 0
getstatic java.util.concurrent.Exchanger.BOUND:J
iload 8
iload 8
sipush 256
iadd
iconst_1
isub
invokevirtual sun.misc.Unsafe.compareAndSwapInt:(Ljava/lang/Object;JII)Z
pop
53: StackMap locals:
StackMap stack:
aload 6
aconst_null
putfield java.util.concurrent.Exchanger$Node.item:Ljava/lang/Object;
54: aload 6
iload 17
putfield java.util.concurrent.Exchanger$Node.hash:I
55: aload 6
dup
getfield java.util.concurrent.Exchanger$Node.index:I
iconst_1
iushr
dup_x1
putfield java.util.concurrent.Exchanger$Node.index:I
istore 7
56: invokestatic java.lang.Thread.interrupted:()Z
ifeq 58
57: aconst_null
areturn
58: StackMap locals:
StackMap stack:
iload 2
ifeq 3
iload 9
ifne 3
lload 3
lconst_0
lcmp
ifgt 3
59: getstatic java.util.concurrent.Exchanger.TIMED_OUT:Ljava/lang/Object;
areturn
end local 19 end local 18 end local 17 end local 16 end local 14 60: StackMap locals: java.util.concurrent.Exchanger java.lang.Object int long java.util.concurrent.Exchanger$Node[] java.util.concurrent.Exchanger$Node int int int top long java.util.concurrent.Exchanger$Node
StackMap stack:
aload 6
aconst_null
putfield java.util.concurrent.Exchanger$Node.item:Ljava/lang/Object;
61: goto 3
62: StackMap locals:
StackMap stack:
aload 6
getfield java.util.concurrent.Exchanger$Node.bound:I
iload 8
if_icmpeq 70
63: aload 6
iload 8
putfield java.util.concurrent.Exchanger$Node.bound:I
64: aload 6
iconst_0
putfield java.util.concurrent.Exchanger$Node.collides:I
65: iload 7
iload 9
if_icmpne 66
iload 9
ifne 67
StackMap locals:
StackMap stack:
66: iload 9
goto 68
StackMap locals:
StackMap stack:
67: iload 9
iconst_1
isub
StackMap locals:
StackMap stack: int
68: istore 7
69: goto 79
70: StackMap locals:
StackMap stack:
aload 6
getfield java.util.concurrent.Exchanger$Node.collides:I
dup
istore 10
start local 10 71: iload 9
if_icmplt 73
iload 9
getstatic java.util.concurrent.Exchanger.FULL:I
if_icmpeq 73
72: getstatic java.util.concurrent.Exchanger.U:Lsun/misc/Unsafe;
aload 0
getstatic java.util.concurrent.Exchanger.BOUND:J
iload 8
iload 8
sipush 256
iadd
iconst_1
iadd
invokevirtual sun.misc.Unsafe.compareAndSwapInt:(Ljava/lang/Object;JII)Z
ifne 78
73: StackMap locals: java.util.concurrent.Exchanger java.lang.Object int long java.util.concurrent.Exchanger$Node[] java.util.concurrent.Exchanger$Node int int int int long java.util.concurrent.Exchanger$Node
StackMap stack:
aload 6
iload 10
iconst_1
iadd
putfield java.util.concurrent.Exchanger$Node.collides:I
74: iload 7
ifne 75
iload 9
goto 76
StackMap locals:
StackMap stack:
75: iload 7
iconst_1
isub
StackMap locals:
StackMap stack: int
76: istore 7
77: goto 79
78: StackMap locals:
StackMap stack:
iload 9
iconst_1
iadd
istore 7
end local 10 79: StackMap locals: java.util.concurrent.Exchanger java.lang.Object int long java.util.concurrent.Exchanger$Node[] java.util.concurrent.Exchanger$Node int int int top long java.util.concurrent.Exchanger$Node
StackMap stack:
aload 6
iload 7
putfield java.util.concurrent.Exchanger$Node.index:I
end local 13 end local 11 end local 9 end local 8 80: goto 3
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 81 0 this Ljava/util/concurrent/Exchanger<TV;>;
0 81 1 item Ljava/lang/Object;
0 81 2 timed Z
0 81 3 ns J
1 81 5 a [Ljava/util/concurrent/Exchanger$Node;
2 81 6 p Ljava/util/concurrent/Exchanger$Node;
3 81 7 i I
13 80 8 b I
14 80 9 m I
71 79 10 c I
4 80 11 j J
5 80 13 q Ljava/util/concurrent/Exchanger$Node;
7 12 14 v Ljava/lang/Object;
9 12 15 w Ljava/lang/Thread;
20 60 14 end J
21 60 16 t Ljava/lang/Thread;
22 60 17 h I
23 60 18 spins I
24 60 19 v Ljava/lang/Object;
MethodParameters:
Name Flags
item
timed
ns
private final java.lang.Object slotExchange(java.lang.Object, boolean, long);
descriptor: (Ljava/lang/Object;ZJ)Ljava/lang/Object;
flags: (0x0012) ACC_PRIVATE, ACC_FINAL
Code:
stack=6, locals=12, args_size=4
start local 0 start local 1 start local 2 start local 3 0: aload 0
getfield java.util.concurrent.Exchanger.participant:Ljava/util/concurrent/Exchanger$Participant;
invokevirtual java.util.concurrent.Exchanger$Participant.get:()Ljava/lang/Object;
checkcast java.util.concurrent.Exchanger$Node
astore 5
start local 5 1: invokestatic java.lang.Thread.currentThread:()Ljava/lang/Thread;
astore 6
start local 6 2: aload 6
invokevirtual java.lang.Thread.isInterrupted:()Z
ifeq 4
3: aconst_null
areturn
4: StackMap locals: java.util.concurrent.Exchanger$Node java.lang.Thread
StackMap stack:
aload 0
getfield java.util.concurrent.Exchanger.slot:Ljava/util/concurrent/Exchanger$Node;
dup
astore 7
start local 7 5: ifnull 17
6: getstatic java.util.concurrent.Exchanger.U:Lsun/misc/Unsafe;
aload 0
getstatic java.util.concurrent.Exchanger.SLOT:J
aload 7
aconst_null
invokevirtual sun.misc.Unsafe.compareAndSwapObject:(Ljava/lang/Object;JLjava/lang/Object;Ljava/lang/Object;)Z
ifeq 13
7: aload 7
getfield java.util.concurrent.Exchanger$Node.item:Ljava/lang/Object;
astore 8
start local 8 8: aload 7
aload 1
putfield java.util.concurrent.Exchanger$Node.match:Ljava/lang/Object;
9: aload 7
getfield java.util.concurrent.Exchanger$Node.parked:Ljava/lang/Thread;
astore 9
start local 9 10: aload 9
ifnull 12
11: getstatic java.util.concurrent.Exchanger.U:Lsun/misc/Unsafe;
aload 9
invokevirtual sun.misc.Unsafe.unpark:(Ljava/lang/Object;)V
12: StackMap locals: java.util.concurrent.Exchanger$Node java.lang.Object java.lang.Thread
StackMap stack:
aload 8
areturn
end local 9 end local 8 13: StackMap locals:
StackMap stack:
getstatic java.util.concurrent.Exchanger.NCPU:I
iconst_1
if_icmple 4
aload 0
getfield java.util.concurrent.Exchanger.bound:I
ifne 4
14: getstatic java.util.concurrent.Exchanger.U:Lsun/misc/Unsafe;
aload 0
getstatic java.util.concurrent.Exchanger.BOUND:J
iconst_0
sipush 256
invokevirtual sun.misc.Unsafe.compareAndSwapInt:(Ljava/lang/Object;JII)Z
ifeq 4
15: aload 0
getstatic java.util.concurrent.Exchanger.FULL:I
iconst_2
iadd
bipush 7
ishl
anewarray java.util.concurrent.Exchanger$Node
putfield java.util.concurrent.Exchanger.arena:[Ljava/util/concurrent/Exchanger$Node;
16: goto 4
17: StackMap locals:
StackMap stack:
aload 0
getfield java.util.concurrent.Exchanger.arena:[Ljava/util/concurrent/Exchanger$Node;
ifnull 19
18: aconst_null
areturn
19: StackMap locals:
StackMap stack:
aload 5
aload 1
putfield java.util.concurrent.Exchanger$Node.item:Ljava/lang/Object;
20: getstatic java.util.concurrent.Exchanger.U:Lsun/misc/Unsafe;
aload 0
getstatic java.util.concurrent.Exchanger.SLOT:J
aconst_null
aload 5
invokevirtual sun.misc.Unsafe.compareAndSwapObject:(Ljava/lang/Object;JLjava/lang/Object;Ljava/lang/Object;)Z
ifeq 22
21: goto 24
22: StackMap locals:
StackMap stack:
aload 5
aconst_null
putfield java.util.concurrent.Exchanger$Node.item:Ljava/lang/Object;
end local 7 23: goto 4
24: StackMap locals:
StackMap stack:
aload 5
getfield java.util.concurrent.Exchanger$Node.hash:I
istore 7
start local 7 25: iload 2
ifeq 26
invokestatic java.lang.System.nanoTime:()J
lload 3
ladd
goto 27
StackMap locals: int
StackMap stack:
26: lconst_0
StackMap locals:
StackMap stack: long
27: lstore 8
start local 8 28: getstatic java.util.concurrent.Exchanger.NCPU:I
iconst_1
if_icmple 29
sipush 1024
goto 30
StackMap locals: long
StackMap stack:
29: iconst_1
StackMap locals:
StackMap stack: int
30: istore 10
start local 10 31: goto 55
start local 11 32: StackMap locals: int java.lang.Object
StackMap stack:
iload 10
ifle 39
33: iload 7
iload 7
iconst_1
ishl
ixor
istore 7
iload 7
iload 7
iconst_3
iushr
ixor
istore 7
iload 7
iload 7
bipush 10
ishl
ixor
istore 7
34: iload 7
ifne 36
35: sipush 1024
aload 6
invokevirtual java.lang.Thread.getId:()J
l2i
ior
istore 7
goto 55
36: StackMap locals:
StackMap stack:
iload 7
ifge 55
iinc 10 -1
iload 10
sipush 511
iand
ifne 55
37: invokestatic java.lang.Thread.yield:()V
38: goto 55
39: StackMap locals:
StackMap stack:
aload 0
getfield java.util.concurrent.Exchanger.slot:Ljava/util/concurrent/Exchanger$Node;
aload 5
if_acmpeq 41
40: sipush 1024
istore 10
goto 55
41: StackMap locals:
StackMap stack:
aload 6
invokevirtual java.lang.Thread.isInterrupted:()Z
ifne 50
aload 0
getfield java.util.concurrent.Exchanger.arena:[Ljava/util/concurrent/Exchanger$Node;
ifnonnull 50
42: iload 2
ifeq 43
lload 8
invokestatic java.lang.System.nanoTime:()J
lsub
dup2
lstore 3
lconst_0
lcmp
ifle 50
43: StackMap locals:
StackMap stack:
getstatic java.util.concurrent.Exchanger.U:Lsun/misc/Unsafe;
aload 6
getstatic java.util.concurrent.Exchanger.BLOCKER:J
aload 0
invokevirtual sun.misc.Unsafe.putObject:(Ljava/lang/Object;JLjava/lang/Object;)V
44: aload 5
aload 6
putfield java.util.concurrent.Exchanger$Node.parked:Ljava/lang/Thread;
45: aload 0
getfield java.util.concurrent.Exchanger.slot:Ljava/util/concurrent/Exchanger$Node;
aload 5
if_acmpne 47
46: getstatic java.util.concurrent.Exchanger.U:Lsun/misc/Unsafe;
iconst_0
lload 3
invokevirtual sun.misc.Unsafe.park:(ZJ)V
47: StackMap locals:
StackMap stack:
aload 5
aconst_null
putfield java.util.concurrent.Exchanger$Node.parked:Ljava/lang/Thread;
48: getstatic java.util.concurrent.Exchanger.U:Lsun/misc/Unsafe;
aload 6
getstatic java.util.concurrent.Exchanger.BLOCKER:J
aconst_null
invokevirtual sun.misc.Unsafe.putObject:(Ljava/lang/Object;JLjava/lang/Object;)V
49: goto 55
50: StackMap locals:
StackMap stack:
getstatic java.util.concurrent.Exchanger.U:Lsun/misc/Unsafe;
aload 0
getstatic java.util.concurrent.Exchanger.SLOT:J
aload 5
aconst_null
invokevirtual sun.misc.Unsafe.compareAndSwapObject:(Ljava/lang/Object;JLjava/lang/Object;Ljava/lang/Object;)Z
ifeq 55
51: iload 2
ifeq 52
lload 3
lconst_0
lcmp
ifgt 52
aload 6
invokevirtual java.lang.Thread.isInterrupted:()Z
ifne 52
getstatic java.util.concurrent.Exchanger.TIMED_OUT:Ljava/lang/Object;
goto 53
StackMap locals:
StackMap stack:
52: aconst_null
StackMap locals:
StackMap stack: java.lang.Object
53: astore 11
54: goto 57
end local 11 55: StackMap locals:
StackMap stack:
aload 5
getfield java.util.concurrent.Exchanger$Node.match:Ljava/lang/Object;
dup
astore 11
start local 11 56: ifnull 32
57: StackMap locals: java.lang.Object
StackMap stack:
getstatic java.util.concurrent.Exchanger.U:Lsun/misc/Unsafe;
aload 5
getstatic java.util.concurrent.Exchanger.MATCH:J
aconst_null
invokevirtual sun.misc.Unsafe.putOrderedObject:(Ljava/lang/Object;JLjava/lang/Object;)V
58: aload 5
aconst_null
putfield java.util.concurrent.Exchanger$Node.item:Ljava/lang/Object;
59: aload 5
iload 7
putfield java.util.concurrent.Exchanger$Node.hash:I
60: aload 11
areturn
end local 11 end local 10 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 61 0 this Ljava/util/concurrent/Exchanger<TV;>;
0 61 1 item Ljava/lang/Object;
0 61 2 timed Z
0 61 3 ns J
1 61 5 p Ljava/util/concurrent/Exchanger$Node;
2 61 6 t Ljava/lang/Thread;
5 23 7 q Ljava/util/concurrent/Exchanger$Node;
8 13 8 v Ljava/lang/Object;
10 13 9 w Ljava/lang/Thread;
25 61 7 h I
28 61 8 end J
31 61 10 spins I
32 55 11 v Ljava/lang/Object;
56 61 11 v Ljava/lang/Object;
MethodParameters:
Name Flags
item
timed
ns
public void <init>();
descriptor: ()V
flags: (0x0001) ACC_PUBLIC
Code:
stack=3, locals=1, args_size=1
start local 0 0: aload 0
invokespecial java.lang.Object.<init>:()V
1: aload 0
new java.util.concurrent.Exchanger$Participant
dup
invokespecial java.util.concurrent.Exchanger$Participant.<init>:()V
putfield java.util.concurrent.Exchanger.participant:Ljava/util/concurrent/Exchanger$Participant;
2: return
end local 0 LocalVariableTable:
Start End Slot Name Signature
0 3 0 this Ljava/util/concurrent/Exchanger<TV;>;
public V exchange();
descriptor: (Ljava/lang/Object;)Ljava/lang/Object;
flags: (0x0001) ACC_PUBLIC
Code:
stack=5, locals=4, args_size=2
start local 0 start local 1 0: aload 1
ifnonnull 1
getstatic java.util.concurrent.Exchanger.NULL_ITEM:Ljava/lang/Object;
goto 2
StackMap locals:
StackMap stack:
1: aload 1
StackMap locals:
StackMap stack: java.lang.Object
2: astore 3
start local 3 3: aload 0
getfield java.util.concurrent.Exchanger.arena:[Ljava/util/concurrent/Exchanger$Node;
ifnonnull 6
4: aload 0
aload 3
iconst_0
lconst_0
invokevirtual java.util.concurrent.Exchanger.slotExchange:(Ljava/lang/Object;ZJ)Ljava/lang/Object;
dup
astore 2
start local 2 5: ifnonnull 10
end local 2 6: StackMap locals: java.util.concurrent.Exchanger java.lang.Object top java.lang.Object
StackMap stack:
invokestatic java.lang.Thread.interrupted:()Z
ifne 9
7: aload 0
aload 3
iconst_0
lconst_0
invokevirtual java.util.concurrent.Exchanger.arenaExchange:(Ljava/lang/Object;ZJ)Ljava/lang/Object;
dup
astore 2
start local 2 8: ifnonnull 10
end local 2 9: StackMap locals:
StackMap stack:
new java.lang.InterruptedException
dup
invokespecial java.lang.InterruptedException.<init>:()V
athrow
start local 2 10: StackMap locals: java.util.concurrent.Exchanger java.lang.Object java.lang.Object java.lang.Object
StackMap stack:
aload 2
getstatic java.util.concurrent.Exchanger.NULL_ITEM:Ljava/lang/Object;
if_acmpne 11
aconst_null
goto 12
StackMap locals:
StackMap stack:
11: aload 2
StackMap locals:
StackMap stack: java.lang.Object
12: areturn
end local 3 end local 2 end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 13 0 this Ljava/util/concurrent/Exchanger<TV;>;
0 13 1 x TV;
5 6 2 v Ljava/lang/Object;
8 9 2 v Ljava/lang/Object;
10 13 2 v Ljava/lang/Object;
3 13 3 item Ljava/lang/Object;
Exceptions:
throws java.lang.InterruptedException
Signature: (TV;)TV;
MethodParameters:
Name Flags
x
public V exchange(V, long, java.util.concurrent.TimeUnit);
descriptor: (Ljava/lang/Object;JLjava/util/concurrent/TimeUnit;)Ljava/lang/Object;
flags: (0x0001) ACC_PUBLIC
Code:
stack=5, locals=9, args_size=4
start local 0 start local 1 start local 2 start local 4 0: aload 1
ifnonnull 1
getstatic java.util.concurrent.Exchanger.NULL_ITEM:Ljava/lang/Object;
goto 2
StackMap locals:
StackMap stack:
1: aload 1
StackMap locals:
StackMap stack: java.lang.Object
2: astore 6
start local 6 3: aload 4
lload 2
invokevirtual java.util.concurrent.TimeUnit.toNanos:(J)J
lstore 7
start local 7 4: aload 0
getfield java.util.concurrent.Exchanger.arena:[Ljava/util/concurrent/Exchanger$Node;
ifnonnull 7
5: aload 0
aload 6
iconst_1
lload 7
invokevirtual java.util.concurrent.Exchanger.slotExchange:(Ljava/lang/Object;ZJ)Ljava/lang/Object;
dup
astore 5
start local 5 6: ifnonnull 11
end local 5 7: StackMap locals: java.util.concurrent.Exchanger java.lang.Object long java.util.concurrent.TimeUnit top java.lang.Object long
StackMap stack:
invokestatic java.lang.Thread.interrupted:()Z
ifne 10
8: aload 0
aload 6
iconst_1
lload 7
invokevirtual java.util.concurrent.Exchanger.arenaExchange:(Ljava/lang/Object;ZJ)Ljava/lang/Object;
dup
astore 5
start local 5 9: ifnonnull 11
end local 5 10: StackMap locals:
StackMap stack:
new java.lang.InterruptedException
dup
invokespecial java.lang.InterruptedException.<init>:()V
athrow
start local 5 11: StackMap locals: java.util.concurrent.Exchanger java.lang.Object long java.util.concurrent.TimeUnit java.lang.Object java.lang.Object long
StackMap stack:
aload 5
getstatic java.util.concurrent.Exchanger.TIMED_OUT:Ljava/lang/Object;
if_acmpne 13
12: new java.util.concurrent.TimeoutException
dup
invokespecial java.util.concurrent.TimeoutException.<init>:()V
athrow
13: StackMap locals:
StackMap stack:
aload 5
getstatic java.util.concurrent.Exchanger.NULL_ITEM:Ljava/lang/Object;
if_acmpne 14
aconst_null
goto 15
StackMap locals:
StackMap stack:
14: aload 5
StackMap locals:
StackMap stack: java.lang.Object
15: areturn
end local 7 end local 6 end local 5 end local 4 end local 2 end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 16 0 this Ljava/util/concurrent/Exchanger<TV;>;
0 16 1 x TV;
0 16 2 timeout J
0 16 4 unit Ljava/util/concurrent/TimeUnit;
6 7 5 v Ljava/lang/Object;
9 10 5 v Ljava/lang/Object;
11 16 5 v Ljava/lang/Object;
3 16 6 item Ljava/lang/Object;
4 16 7 ns J
Exceptions:
throws java.lang.InterruptedException, java.util.concurrent.TimeoutException
Signature: (TV;JLjava/util/concurrent/TimeUnit;)TV;
MethodParameters:
Name Flags
x
timeout
unit
}
Signature: <V:Ljava/lang/Object;>Ljava/lang/Object;
SourceFile: "Exchanger.java"
NestMembers:
java.util.concurrent.Exchanger$Node java.util.concurrent.Exchanger$Participant
InnerClasses:
final Node = java.util.concurrent.Exchanger$Node of java.util.concurrent.Exchanger
final Participant = java.util.concurrent.Exchanger$Participant of java.util.concurrent.Exchanger