public final class jdk.internal.misc.InnocuousThread extends java.lang.Thread
minor version: 0
major version: 59
flags: flags: (0x0031) ACC_PUBLIC, ACC_FINAL, ACC_SUPER
this_class: jdk.internal.misc.InnocuousThread
super_class: java.lang.Thread
{
private static final jdk.internal.misc.Unsafe UNSAFE;
descriptor: Ljdk/internal/misc/Unsafe;
flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
private static final long THREAD_LOCALS;
descriptor: J
flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
private static final long INHERITABLE_THREAD_LOCALS;
descriptor: J
flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
private static final java.lang.ThreadGroup INNOCUOUSTHREADGROUP;
descriptor: Ljava/lang/ThreadGroup;
flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
private static final java.security.AccessControlContext ACC;
descriptor: Ljava/security/AccessControlContext;
flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
private static final long INHERITEDACCESSCONTROLCONTEXT;
descriptor: J
flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
private static final long CONTEXTCLASSLOADER;
descriptor: J
flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
private static final java.util.concurrent.atomic.AtomicInteger threadNumber;
descriptor: Ljava/util/concurrent/atomic/AtomicInteger;
flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
private volatile boolean hasRun;
descriptor: Z
flags: (0x0042) ACC_PRIVATE, ACC_VOLATILE
static void <clinit>();
descriptor: ()V
flags: (0x0008) ACC_STATIC
Code:
stack=9, locals=8, args_size=0
0: new java.util.concurrent.atomic.AtomicInteger
dup
iconst_1
invokespecial java.util.concurrent.atomic.AtomicInteger.<init>:(I)V
putstatic jdk.internal.misc.InnocuousThread.threadNumber:Ljava/util/concurrent/atomic/AtomicInteger;
1: new java.security.AccessControlContext
dup
iconst_1
anewarray java.security.ProtectionDomain
dup
iconst_0
2: new java.security.ProtectionDomain
dup
aconst_null
aconst_null
invokespecial java.security.ProtectionDomain.<init>:(Ljava/security/CodeSource;Ljava/security/PermissionCollection;)V
aastore
3: invokespecial java.security.AccessControlContext.<init>:([Ljava/security/ProtectionDomain;)V
putstatic jdk.internal.misc.InnocuousThread.ACC:Ljava/security/AccessControlContext;
4: invokestatic jdk.internal.misc.Unsafe.getUnsafe:()Ljdk/internal/misc/Unsafe;
putstatic jdk.internal.misc.InnocuousThread.UNSAFE:Ljdk/internal/misc/Unsafe;
5: ldc Ljava/lang/Thread;
astore 0
start local 0 6: ldc Ljava/lang/ThreadGroup;
astore 1
start local 1 7: getstatic jdk.internal.misc.InnocuousThread.UNSAFE:Ljdk/internal/misc/Unsafe;
aload 0
ldc "threadLocals"
invokevirtual jdk.internal.misc.Unsafe.objectFieldOffset:(Ljava/lang/Class;Ljava/lang/String;)J
putstatic jdk.internal.misc.InnocuousThread.THREAD_LOCALS:J
8: getstatic jdk.internal.misc.InnocuousThread.UNSAFE:Ljdk/internal/misc/Unsafe;
9: aload 0
ldc "inheritableThreadLocals"
10: invokevirtual jdk.internal.misc.Unsafe.objectFieldOffset:(Ljava/lang/Class;Ljava/lang/String;)J
putstatic jdk.internal.misc.InnocuousThread.INHERITABLE_THREAD_LOCALS:J
11: getstatic jdk.internal.misc.InnocuousThread.UNSAFE:Ljdk/internal/misc/Unsafe;
12: aload 0
ldc "inheritedAccessControlContext"
13: invokevirtual jdk.internal.misc.Unsafe.objectFieldOffset:(Ljava/lang/Class;Ljava/lang/String;)J
putstatic jdk.internal.misc.InnocuousThread.INHERITEDACCESSCONTROLCONTEXT:J
14: getstatic jdk.internal.misc.InnocuousThread.UNSAFE:Ljdk/internal/misc/Unsafe;
15: aload 0
ldc "contextClassLoader"
16: invokevirtual jdk.internal.misc.Unsafe.objectFieldOffset:(Ljava/lang/Class;Ljava/lang/String;)J
putstatic jdk.internal.misc.InnocuousThread.CONTEXTCLASSLOADER:J
17: getstatic jdk.internal.misc.InnocuousThread.UNSAFE:Ljdk/internal/misc/Unsafe;
aload 0
ldc "group"
invokevirtual jdk.internal.misc.Unsafe.objectFieldOffset:(Ljava/lang/Class;Ljava/lang/String;)J
lstore 2
start local 2 18: getstatic jdk.internal.misc.InnocuousThread.UNSAFE:Ljdk/internal/misc/Unsafe;
aload 1
ldc "parent"
invokevirtual jdk.internal.misc.Unsafe.objectFieldOffset:(Ljava/lang/Class;Ljava/lang/String;)J
lstore 4
start local 4 19: getstatic jdk.internal.misc.InnocuousThread.UNSAFE:Ljdk/internal/misc/Unsafe;
invokestatic java.lang.Thread.currentThread:()Ljava/lang/Thread;
lload 2
invokevirtual jdk.internal.misc.Unsafe.getObject:(Ljava/lang/Object;J)Ljava/lang/Object;
20: checkcast java.lang.ThreadGroup
astore 6
start local 6 21: goto 26
22: StackMap locals: java.lang.Class java.lang.Class long long java.lang.ThreadGroup
StackMap stack:
getstatic jdk.internal.misc.InnocuousThread.UNSAFE:Ljdk/internal/misc/Unsafe;
aload 6
lload 4
invokevirtual jdk.internal.misc.Unsafe.getObject:(Ljava/lang/Object;J)Ljava/lang/Object;
checkcast java.lang.ThreadGroup
astore 7
start local 7 23: aload 7
ifnonnull 25
24: goto 27
25: StackMap locals: java.lang.ThreadGroup
StackMap stack:
aload 7
astore 6
end local 7 26: StackMap locals:
StackMap stack:
aload 6
ifnonnull 22
27: StackMap locals:
StackMap stack:
aload 6
astore 7
start local 7 28: new jdk.internal.misc.InnocuousThread$1
dup
aload 7
invokespecial jdk.internal.misc.InnocuousThread$1.<init>:(Ljava/lang/ThreadGroup;)V
29: invokestatic java.security.AccessController.doPrivileged:(Ljava/security/PrivilegedAction;)Ljava/lang/Object;
checkcast java.lang.ThreadGroup
putstatic jdk.internal.misc.InnocuousThread.INNOCUOUSTHREADGROUP:Ljava/lang/ThreadGroup;
end local 7 end local 6 end local 4 end local 2 end local 1 end local 0 30: goto 33
StackMap locals:
StackMap stack: java.lang.Exception
31: astore 0
start local 0 32: new java.lang.Error
dup
aload 0
invokespecial java.lang.Error.<init>:(Ljava/lang/Throwable;)V
athrow
end local 0 33: StackMap locals:
StackMap stack:
return
LocalVariableTable:
Start End Slot Name Signature
6 30 0 tk Ljava/lang/Class<*>;
7 30 1 gk Ljava/lang/Class<*>;
18 30 2 tg J
19 30 4 gp J
21 30 6 group Ljava/lang/ThreadGroup;
23 26 7 parent Ljava/lang/ThreadGroup;
28 30 7 root Ljava/lang/ThreadGroup;
32 33 0 e Ljava/lang/Exception;
Exception table:
from to target type
1 30 31 Class java.lang.Exception
private static java.lang.String newName();
descriptor: ()Ljava/lang/String;
flags: (0x000a) ACC_PRIVATE, ACC_STATIC
Code:
stack=3, locals=0, args_size=0
0: new java.lang.StringBuilder
dup
ldc "InnocuousThread-"
invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
getstatic jdk.internal.misc.InnocuousThread.threadNumber:Ljava/util/concurrent/atomic/AtomicInteger;
invokevirtual java.util.concurrent.atomic.AtomicInteger.getAndIncrement:()I
invokevirtual java.lang.StringBuilder.append:(I)Ljava/lang/StringBuilder;
invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
areturn
LocalVariableTable:
Start End Slot Name Signature
public static java.lang.Thread newThread(java.lang.Runnable);
descriptor: (Ljava/lang/Runnable;)Ljava/lang/Thread;
flags: (0x0009) ACC_PUBLIC, ACC_STATIC
Code:
stack=2, locals=1, args_size=1
start local 0 0: invokestatic jdk.internal.misc.InnocuousThread.newName:()Ljava/lang/String;
aload 0
invokestatic jdk.internal.misc.InnocuousThread.newThread:(Ljava/lang/String;Ljava/lang/Runnable;)Ljava/lang/Thread;
areturn
end local 0 LocalVariableTable:
Start End Slot Name Signature
0 1 0 target Ljava/lang/Runnable;
MethodParameters:
Name Flags
target
public static java.lang.Thread newThread(java.lang.String, java.lang.Runnable);
descriptor: (Ljava/lang/String;Ljava/lang/Runnable;)Ljava/lang/Thread;
flags: (0x0009) ACC_PUBLIC, ACC_STATIC
Code:
stack=4, locals=2, args_size=2
start local 0 start local 1 0: new jdk.internal.misc.InnocuousThread$2
dup
aload 1
aload 0
invokespecial jdk.internal.misc.InnocuousThread$2.<init>:(Ljava/lang/Runnable;Ljava/lang/String;)V
1: invokestatic java.security.AccessController.doPrivileged:(Ljava/security/PrivilegedAction;)Ljava/lang/Object;
checkcast java.lang.Thread
areturn
end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 2 0 name Ljava/lang/String;
0 2 1 target Ljava/lang/Runnable;
MethodParameters:
Name Flags
name
target
public static java.lang.Thread newSystemThread(java.lang.Runnable);
descriptor: (Ljava/lang/Runnable;)Ljava/lang/Thread;
flags: (0x0009) ACC_PUBLIC, ACC_STATIC
Code:
stack=2, locals=1, args_size=1
start local 0 0: invokestatic jdk.internal.misc.InnocuousThread.newName:()Ljava/lang/String;
aload 0
invokestatic jdk.internal.misc.InnocuousThread.newSystemThread:(Ljava/lang/String;Ljava/lang/Runnable;)Ljava/lang/Thread;
areturn
end local 0 LocalVariableTable:
Start End Slot Name Signature
0 1 0 target Ljava/lang/Runnable;
MethodParameters:
Name Flags
target
public static java.lang.Thread newSystemThread(java.lang.String, java.lang.Runnable);
descriptor: (Ljava/lang/String;Ljava/lang/Runnable;)Ljava/lang/Thread;
flags: (0x0009) ACC_PUBLIC, ACC_STATIC
Code:
stack=4, locals=2, args_size=2
start local 0 start local 1 0: new jdk.internal.misc.InnocuousThread$3
dup
aload 1
aload 0
invokespecial jdk.internal.misc.InnocuousThread$3.<init>:(Ljava/lang/Runnable;Ljava/lang/String;)V
1: invokestatic java.security.AccessController.doPrivileged:(Ljava/security/PrivilegedAction;)Ljava/lang/Object;
checkcast java.lang.Thread
areturn
end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 2 0 name Ljava/lang/String;
0 2 1 target Ljava/lang/Runnable;
MethodParameters:
Name Flags
name
target
private void <init>(java.lang.ThreadGroup, java.lang.Runnable, java.lang.String, java.lang.ClassLoader);
descriptor: (Ljava/lang/ThreadGroup;Ljava/lang/Runnable;Ljava/lang/String;Ljava/lang/ClassLoader;)V
flags: (0x0002) ACC_PRIVATE
Code:
stack=7, locals=5, args_size=5
start local 0 start local 1 start local 2 start local 3 start local 4 0: aload 0
aload 1
aload 2
aload 3
lconst_0
iconst_0
invokespecial java.lang.Thread.<init>:(Ljava/lang/ThreadGroup;Ljava/lang/Runnable;Ljava/lang/String;JZ)V
1: getstatic jdk.internal.misc.InnocuousThread.UNSAFE:Ljdk/internal/misc/Unsafe;
aload 0
getstatic jdk.internal.misc.InnocuousThread.INHERITEDACCESSCONTROLCONTEXT:J
getstatic jdk.internal.misc.InnocuousThread.ACC:Ljava/security/AccessControlContext;
invokevirtual jdk.internal.misc.Unsafe.putObjectRelease:(Ljava/lang/Object;JLjava/lang/Object;)V
2: getstatic jdk.internal.misc.InnocuousThread.UNSAFE:Ljdk/internal/misc/Unsafe;
aload 0
getstatic jdk.internal.misc.InnocuousThread.CONTEXTCLASSLOADER:J
aload 4
invokevirtual jdk.internal.misc.Unsafe.putObjectRelease:(Ljava/lang/Object;JLjava/lang/Object;)V
3: return
end local 4 end local 3 end local 2 end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 4 0 this Ljdk/internal/misc/InnocuousThread;
0 4 1 group Ljava/lang/ThreadGroup;
0 4 2 target Ljava/lang/Runnable;
0 4 3 name Ljava/lang/String;
0 4 4 tccl Ljava/lang/ClassLoader;
MethodParameters:
Name Flags
group
target
name
tccl
public void setUncaughtExceptionHandler(java.lang.Thread$UncaughtExceptionHandler);
descriptor: (Ljava/lang/Thread$UncaughtExceptionHandler;)V
flags: (0x0001) ACC_PUBLIC
Code:
stack=0, locals=2, args_size=2
start local 0 start local 1 0: return
end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 1 0 this Ljdk/internal/misc/InnocuousThread;
0 1 1 x Ljava/lang/Thread$UncaughtExceptionHandler;
MethodParameters:
Name Flags
x
public void setContextClassLoader(java.lang.ClassLoader);
descriptor: (Ljava/lang/ClassLoader;)V
flags: (0x0001) ACC_PUBLIC
Code:
stack=3, locals=2, args_size=2
start local 0 start local 1 0: aload 1
ifnonnull 2
1: aload 0
aconst_null
invokespecial java.lang.Thread.setContextClassLoader:(Ljava/lang/ClassLoader;)V
goto 3
2: StackMap locals:
StackMap stack:
new java.lang.SecurityException
dup
ldc "setContextClassLoader"
invokespecial java.lang.SecurityException.<init>:(Ljava/lang/String;)V
athrow
3: StackMap locals:
StackMap stack:
return
end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 4 0 this Ljdk/internal/misc/InnocuousThread;
0 4 1 cl Ljava/lang/ClassLoader;
MethodParameters:
Name Flags
cl
public final void eraseThreadLocals();
descriptor: ()V
flags: (0x0011) ACC_PUBLIC, ACC_FINAL
Code:
stack=5, locals=1, args_size=1
start local 0 0: getstatic jdk.internal.misc.InnocuousThread.UNSAFE:Ljdk/internal/misc/Unsafe;
aload 0
getstatic jdk.internal.misc.InnocuousThread.THREAD_LOCALS:J
aconst_null
invokevirtual jdk.internal.misc.Unsafe.putObject:(Ljava/lang/Object;JLjava/lang/Object;)V
1: getstatic jdk.internal.misc.InnocuousThread.UNSAFE:Ljdk/internal/misc/Unsafe;
aload 0
getstatic jdk.internal.misc.InnocuousThread.INHERITABLE_THREAD_LOCALS:J
aconst_null
invokevirtual jdk.internal.misc.Unsafe.putObject:(Ljava/lang/Object;JLjava/lang/Object;)V
2: return
end local 0 LocalVariableTable:
Start End Slot Name Signature
0 3 0 this Ljdk/internal/misc/InnocuousThread;
public void run();
descriptor: ()V
flags: (0x0001) ACC_PUBLIC
Code:
stack=2, locals=1, args_size=1
start local 0 0: invokestatic java.lang.Thread.currentThread:()Ljava/lang/Thread;
aload 0
if_acmpne 3
aload 0
getfield jdk.internal.misc.InnocuousThread.hasRun:Z
ifne 3
1: aload 0
iconst_1
putfield jdk.internal.misc.InnocuousThread.hasRun:Z
2: aload 0
invokespecial java.lang.Thread.run:()V
3: StackMap locals:
StackMap stack:
return
end local 0 LocalVariableTable:
Start End Slot Name Signature
0 4 0 this Ljdk/internal/misc/InnocuousThread;
}
SourceFile: "InnocuousThread.java"
NestMembers:
jdk.internal.misc.InnocuousThread$1 jdk.internal.misc.InnocuousThread$2 jdk.internal.misc.InnocuousThread$3
InnerClasses:
public abstract UncaughtExceptionHandler = java.lang.Thread$UncaughtExceptionHandler of java.lang.Thread
jdk.internal.misc.InnocuousThread$1
jdk.internal.misc.InnocuousThread$2
jdk.internal.misc.InnocuousThread$3