public final class sun.misc.InnocuousThread extends java.lang.Thread
minor version: 0
major version: 59
flags: flags: (0x0031) ACC_PUBLIC, ACC_FINAL, ACC_SUPER
this_class: sun.misc.InnocuousThread
super_class: java.lang.Thread
{
private static final sun.misc.Unsafe UNSAFE;
descriptor: Lsun/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 sun.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 sun.misc.InnocuousThread.ACC:Ljava/security/AccessControlContext;
4: invokestatic sun.misc.Unsafe.getUnsafe:()Lsun/misc/Unsafe;
putstatic sun.misc.InnocuousThread.UNSAFE:Lsun/misc/Unsafe;
5: ldc Ljava/lang/Thread;
astore 0
start local 0 6: ldc Ljava/lang/ThreadGroup;
astore 1
start local 1 7: getstatic sun.misc.InnocuousThread.UNSAFE:Lsun/misc/Unsafe;
8: aload 0
ldc "threadLocals"
invokevirtual java.lang.Class.getDeclaredField:(Ljava/lang/String;)Ljava/lang/reflect/Field;
9: invokevirtual sun.misc.Unsafe.objectFieldOffset:(Ljava/lang/reflect/Field;)J
putstatic sun.misc.InnocuousThread.THREAD_LOCALS:J
10: getstatic sun.misc.InnocuousThread.UNSAFE:Lsun/misc/Unsafe;
11: aload 0
ldc "inheritableThreadLocals"
invokevirtual java.lang.Class.getDeclaredField:(Ljava/lang/String;)Ljava/lang/reflect/Field;
12: invokevirtual sun.misc.Unsafe.objectFieldOffset:(Ljava/lang/reflect/Field;)J
putstatic sun.misc.InnocuousThread.INHERITABLE_THREAD_LOCALS:J
13: getstatic sun.misc.InnocuousThread.UNSAFE:Lsun/misc/Unsafe;
14: aload 0
ldc "inheritedAccessControlContext"
invokevirtual java.lang.Class.getDeclaredField:(Ljava/lang/String;)Ljava/lang/reflect/Field;
15: invokevirtual sun.misc.Unsafe.objectFieldOffset:(Ljava/lang/reflect/Field;)J
putstatic sun.misc.InnocuousThread.INHERITEDACCESSCONTROLCONTEXT:J
16: getstatic sun.misc.InnocuousThread.UNSAFE:Lsun/misc/Unsafe;
17: aload 0
ldc "contextClassLoader"
invokevirtual java.lang.Class.getDeclaredField:(Ljava/lang/String;)Ljava/lang/reflect/Field;
18: invokevirtual sun.misc.Unsafe.objectFieldOffset:(Ljava/lang/reflect/Field;)J
putstatic sun.misc.InnocuousThread.CONTEXTCLASSLOADER:J
19: getstatic sun.misc.InnocuousThread.UNSAFE:Lsun/misc/Unsafe;
aload 0
ldc "group"
invokevirtual java.lang.Class.getDeclaredField:(Ljava/lang/String;)Ljava/lang/reflect/Field;
invokevirtual sun.misc.Unsafe.objectFieldOffset:(Ljava/lang/reflect/Field;)J
lstore 2
start local 2 20: getstatic sun.misc.InnocuousThread.UNSAFE:Lsun/misc/Unsafe;
aload 1
ldc "parent"
invokevirtual java.lang.Class.getDeclaredField:(Ljava/lang/String;)Ljava/lang/reflect/Field;
invokevirtual sun.misc.Unsafe.objectFieldOffset:(Ljava/lang/reflect/Field;)J
lstore 4
start local 4 21: getstatic sun.misc.InnocuousThread.UNSAFE:Lsun/misc/Unsafe;
invokestatic java.lang.Thread.currentThread:()Ljava/lang/Thread;
lload 2
invokevirtual sun.misc.Unsafe.getObject:(Ljava/lang/Object;J)Ljava/lang/Object;
22: checkcast java.lang.ThreadGroup
astore 6
start local 6 23: goto 28
24: StackMap locals: java.lang.Class java.lang.Class long long java.lang.ThreadGroup
StackMap stack:
getstatic sun.misc.InnocuousThread.UNSAFE:Lsun/misc/Unsafe;
aload 6
lload 4
invokevirtual sun.misc.Unsafe.getObject:(Ljava/lang/Object;J)Ljava/lang/Object;
checkcast java.lang.ThreadGroup
astore 7
start local 7 25: aload 7
ifnonnull 27
26: goto 29
27: StackMap locals: java.lang.ThreadGroup
StackMap stack:
aload 7
astore 6
end local 7 28: StackMap locals:
StackMap stack:
aload 6
ifnonnull 24
29: StackMap locals:
StackMap stack:
aload 6
astore 7
start local 7 30: new sun.misc.InnocuousThread$1
dup
aload 7
invokespecial sun.misc.InnocuousThread$1.<init>:(Ljava/lang/ThreadGroup;)V
31: invokestatic java.security.AccessController.doPrivileged:(Ljava/security/PrivilegedAction;)Ljava/lang/Object;
checkcast java.lang.ThreadGroup
putstatic sun.misc.InnocuousThread.INNOCUOUSTHREADGROUP:Ljava/lang/ThreadGroup;
end local 7 end local 6 end local 4 end local 2 end local 1 end local 0 32: goto 35
StackMap locals:
StackMap stack: java.lang.Exception
33: astore 0
start local 0 34: new java.lang.Error
dup
aload 0
invokespecial java.lang.Error.<init>:(Ljava/lang/Throwable;)V
athrow
end local 0 35: StackMap locals:
StackMap stack:
return
LocalVariableTable:
Start End Slot Name Signature
6 32 0 tk Ljava/lang/Class<*>;
7 32 1 gk Ljava/lang/Class<*>;
20 32 2 tg J
21 32 4 gp J
23 32 6 group Ljava/lang/ThreadGroup;
25 28 7 parent Ljava/lang/ThreadGroup;
30 32 7 root Ljava/lang/ThreadGroup;
34 35 0 e Ljava/lang/Exception;
Exception table:
from to target type
1 32 33 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 sun.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 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 sun.misc.InnocuousThread.newName:()Ljava/lang/String;
aload 0
invokestatic sun.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=6, locals=2, args_size=2
start local 0 start local 1 0: new sun.misc.InnocuousThread
dup
getstatic sun.misc.InnocuousThread.INNOCUOUSTHREADGROUP:Ljava/lang/ThreadGroup;
1: aload 1
aload 0
aconst_null
2: invokespecial sun.misc.InnocuousThread.<init>:(Ljava/lang/ThreadGroup;Ljava/lang/Runnable;Ljava/lang/String;Ljava/lang/ClassLoader;)V
areturn
end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 3 0 name Ljava/lang/String;
0 3 1 target Ljava/lang/Runnable;
MethodParameters:
Name Flags
name
target
public void <init>(java.lang.Runnable);
descriptor: (Ljava/lang/Runnable;)V
flags: (0x0001) ACC_PUBLIC
Code:
stack=5, locals=2, args_size=2
start local 0 start local 1 0: aload 0
getstatic sun.misc.InnocuousThread.INNOCUOUSTHREADGROUP:Ljava/lang/ThreadGroup;
aload 1
invokestatic sun.misc.InnocuousThread.newName:()Ljava/lang/String;
invokespecial java.lang.Thread.<init>:(Ljava/lang/ThreadGroup;Ljava/lang/Runnable;Ljava/lang/String;)V
1: getstatic sun.misc.InnocuousThread.UNSAFE:Lsun/misc/Unsafe;
aload 0
getstatic sun.misc.InnocuousThread.INHERITEDACCESSCONTROLCONTEXT:J
getstatic sun.misc.InnocuousThread.ACC:Ljava/security/AccessControlContext;
invokevirtual sun.misc.Unsafe.putOrderedObject:(Ljava/lang/Object;JLjava/lang/Object;)V
2: aload 0
invokevirtual sun.misc.InnocuousThread.eraseThreadLocals:()V
3: return
end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 4 0 this Lsun/misc/InnocuousThread;
0 4 1 target Ljava/lang/Runnable;
MethodParameters:
Name Flags
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=6, 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
invokespecial java.lang.Thread.<init>:(Ljava/lang/ThreadGroup;Ljava/lang/Runnable;Ljava/lang/String;J)V
1: getstatic sun.misc.InnocuousThread.UNSAFE:Lsun/misc/Unsafe;
aload 0
getstatic sun.misc.InnocuousThread.INHERITEDACCESSCONTROLCONTEXT:J
getstatic sun.misc.InnocuousThread.ACC:Ljava/security/AccessControlContext;
invokevirtual sun.misc.Unsafe.putOrderedObject:(Ljava/lang/Object;JLjava/lang/Object;)V
2: getstatic sun.misc.InnocuousThread.UNSAFE:Lsun/misc/Unsafe;
aload 0
getstatic sun.misc.InnocuousThread.CONTEXTCLASSLOADER:J
aload 4
invokevirtual sun.misc.Unsafe.putOrderedObject:(Ljava/lang/Object;JLjava/lang/Object;)V
3: aload 0
invokevirtual sun.misc.InnocuousThread.eraseThreadLocals:()V
4: return
end local 4 end local 3 end local 2 end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 5 0 this Lsun/misc/InnocuousThread;
0 5 1 group Ljava/lang/ThreadGroup;
0 5 2 target Ljava/lang/Runnable;
0 5 3 name Ljava/lang/String;
0 5 4 tccl Ljava/lang/ClassLoader;
MethodParameters:
Name Flags
group
target
name
tccl
public java.lang.ClassLoader getContextClassLoader();
descriptor: ()Ljava/lang/ClassLoader;
flags: (0x0001) ACC_PUBLIC
Code:
stack=1, locals=1, args_size=1
start local 0 0: invokestatic java.lang.ClassLoader.getSystemClassLoader:()Ljava/lang/ClassLoader;
areturn
end local 0 LocalVariableTable:
Start End Slot Name Signature
0 1 0 this Lsun/misc/InnocuousThread;
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 Lsun/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: new java.lang.SecurityException
dup
ldc "setContextClassLoader"
invokespecial java.lang.SecurityException.<init>:(Ljava/lang/String;)V
athrow
end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 1 0 this Lsun/misc/InnocuousThread;
0 1 1 cl Ljava/lang/ClassLoader;
MethodParameters:
Name Flags
cl
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 sun.misc.InnocuousThread.hasRun:Z
ifne 3
1: aload 0
iconst_1
putfield sun.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 Lsun/misc/InnocuousThread;
public void eraseThreadLocals();
descriptor: ()V
flags: (0x0001) ACC_PUBLIC
Code:
stack=5, locals=1, args_size=1
start local 0 0: getstatic sun.misc.InnocuousThread.UNSAFE:Lsun/misc/Unsafe;
aload 0
getstatic sun.misc.InnocuousThread.THREAD_LOCALS:J
aconst_null
invokevirtual sun.misc.Unsafe.putObject:(Ljava/lang/Object;JLjava/lang/Object;)V
1: getstatic sun.misc.InnocuousThread.UNSAFE:Lsun/misc/Unsafe;
aload 0
getstatic sun.misc.InnocuousThread.INHERITABLE_THREAD_LOCALS:J
aconst_null
invokevirtual sun.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 Lsun/misc/InnocuousThread;
}
SourceFile: "InnocuousThread.java"
NestMembers:
sun.misc.InnocuousThread$1
InnerClasses:
public abstract UncaughtExceptionHandler = java.lang.Thread$UncaughtExceptionHandler of java.lang.Thread
sun.misc.InnocuousThread$1