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 java.lang.ThreadGroup THREADGROUP;
    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 THREADLOCALS;
    descriptor: J
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL

  private static final long INHERITABLETHREADLOCALS;
    descriptor: J
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL

  private static final long INHERITEDACCESSCONTROLCONTEXT;
    descriptor: J
    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: .line 89
            new java.security.AccessControlContext
            dup
            iconst_1
            anewarray java.security.ProtectionDomain
            dup
            iconst_0
         1: .line 90
            new java.security.ProtectionDomain
            dup
            aconst_null
            aconst_null
            invokespecial java.security.ProtectionDomain.<init>:(Ljava/security/CodeSource;Ljava/security/PermissionCollection;)V
            aastore
         2: .line 89
            invokespecial java.security.AccessControlContext.<init>:([Ljava/security/ProtectionDomain;)V
            putstatic sun.misc.InnocuousThread.ACC:Ljava/security/AccessControlContext;
         3: .line 94
            invokestatic sun.misc.Unsafe.getUnsafe:()Lsun/misc/Unsafe;
            putstatic sun.misc.InnocuousThread.UNSAFE:Lsun/misc/Unsafe;
         4: .line 95
            ldc Ljava/lang/Thread;
            astore 0 /* tk */
        start local 0 // java.lang.Class tk
         5: .line 96
            ldc Ljava/lang/ThreadGroup;
            astore 1 /* gk */
        start local 1 // java.lang.Class gk
         6: .line 98
            getstatic sun.misc.InnocuousThread.UNSAFE:Lsun/misc/Unsafe;
         7: .line 99
            aload 0 /* tk */
            ldc "threadLocals"
            invokevirtual java.lang.Class.getDeclaredField:(Ljava/lang/String;)Ljava/lang/reflect/Field;
         8: .line 98
            invokevirtual sun.misc.Unsafe.objectFieldOffset:(Ljava/lang/reflect/Field;)J
            putstatic sun.misc.InnocuousThread.THREADLOCALS:J
         9: .line 100
            getstatic sun.misc.InnocuousThread.UNSAFE:Lsun/misc/Unsafe;
        10: .line 101
            aload 0 /* tk */
            ldc "inheritableThreadLocals"
            invokevirtual java.lang.Class.getDeclaredField:(Ljava/lang/String;)Ljava/lang/reflect/Field;
        11: .line 100
            invokevirtual sun.misc.Unsafe.objectFieldOffset:(Ljava/lang/reflect/Field;)J
            putstatic sun.misc.InnocuousThread.INHERITABLETHREADLOCALS:J
        12: .line 102
            getstatic sun.misc.InnocuousThread.UNSAFE:Lsun/misc/Unsafe;
        13: .line 103
            aload 0 /* tk */
            ldc "inheritedAccessControlContext"
            invokevirtual java.lang.Class.getDeclaredField:(Ljava/lang/String;)Ljava/lang/reflect/Field;
        14: .line 102
            invokevirtual sun.misc.Unsafe.objectFieldOffset:(Ljava/lang/reflect/Field;)J
            putstatic sun.misc.InnocuousThread.INHERITEDACCESSCONTROLCONTEXT:J
        15: .line 105
            getstatic sun.misc.InnocuousThread.UNSAFE:Lsun/misc/Unsafe;
            aload 0 /* tk */
            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 /* tg */
        start local 2 // long tg
        16: .line 106
            getstatic sun.misc.InnocuousThread.UNSAFE:Lsun/misc/Unsafe;
            aload 1 /* gk */
            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 /* gp */
        start local 4 // long gp
        17: .line 108
            getstatic sun.misc.InnocuousThread.UNSAFE:Lsun/misc/Unsafe;
            invokestatic java.lang.Thread.currentThread:()Ljava/lang/Thread;
            lload 2 /* tg */
            invokevirtual sun.misc.Unsafe.getObject:(Ljava/lang/Object;J)Ljava/lang/Object;
        18: .line 107
            checkcast java.lang.ThreadGroup
            astore 6 /* group */
        start local 6 // java.lang.ThreadGroup group
        19: .line 110
            goto 24
        20: .line 111
      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 /* group */
            lload 4 /* gp */
            invokevirtual sun.misc.Unsafe.getObject:(Ljava/lang/Object;J)Ljava/lang/Object;
            checkcast java.lang.ThreadGroup
            astore 7 /* parent */
        start local 7 // java.lang.ThreadGroup parent
        21: .line 112
            aload 7 /* parent */
            ifnonnull 23
        22: .line 113
            goto 25
        23: .line 114
      StackMap locals: java.lang.ThreadGroup
      StackMap stack:
            aload 7 /* parent */
            astore 6 /* group */
        end local 7 // java.lang.ThreadGroup parent
        24: .line 110
      StackMap locals:
      StackMap stack:
            aload 6 /* group */
            ifnonnull 20
        25: .line 116
      StackMap locals:
      StackMap stack:
            new java.lang.ThreadGroup
            dup
            aload 6 /* group */
            ldc "InnocuousThreadGroup"
            invokespecial java.lang.ThreadGroup.<init>:(Ljava/lang/ThreadGroup;Ljava/lang/String;)V
            putstatic sun.misc.InnocuousThread.THREADGROUP:Ljava/lang/ThreadGroup;
        end local 6 // java.lang.ThreadGroup group
        end local 4 // long gp
        end local 2 // long tg
        end local 1 // java.lang.Class gk
        end local 0 // java.lang.Class tk
        26: .line 117
            goto 29
      StackMap locals:
      StackMap stack: java.lang.Exception
        27: astore 0 /* e */
        start local 0 // java.lang.Exception e
        28: .line 118
            new java.lang.Error
            dup
            aload 0 /* e */
            invokespecial java.lang.Error.<init>:(Ljava/lang/Throwable;)V
            athrow
        end local 0 // java.lang.Exception e
        29: .line 120
      StackMap locals:
      StackMap stack:
            return
      LocalVariableTable:
        Start  End  Slot    Name  Signature
            5   26     0      tk  Ljava/lang/Class<*>;
            6   26     1      gk  Ljava/lang/Class<*>;
           16   26     2      tg  J
           17   26     4      gp  J
           19   26     6   group  Ljava/lang/ThreadGroup;
           21   24     7  parent  Ljava/lang/ThreadGroup;
           28   29     0       e  Ljava/lang/Exception;
      Exception table:
        from    to  target  type
           0    26      27  Class java.lang.Exception

  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 // sun.misc.InnocuousThread this
        start local 1 // java.lang.Runnable target
         0: .line 46
            aload 0 /* this */
            getstatic sun.misc.InnocuousThread.THREADGROUP:Ljava/lang/ThreadGroup;
            aload 1 /* target */
            ldc "anInnocuousThread"
            invokespecial java.lang.Thread.<init>:(Ljava/lang/ThreadGroup;Ljava/lang/Runnable;Ljava/lang/String;)V
         1: .line 47
            getstatic sun.misc.InnocuousThread.UNSAFE:Lsun/misc/Unsafe;
            aload 0 /* this */
            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: .line 48
            aload 0 /* this */
            invokevirtual sun.misc.InnocuousThread.eraseThreadLocals:()V
         3: .line 49
            return
        end local 1 // java.lang.Runnable target
        end local 0 // sun.misc.InnocuousThread this
      LocalVariableTable:
        Start  End  Slot    Name  Signature
            0    4     0    this  Lsun/misc/InnocuousThread;
            0    4     1  target  Ljava/lang/Runnable;
    MethodParameters:
        Name  Flags
      target  

  public java.lang.ClassLoader getContextClassLoader();
    descriptor: ()Ljava/lang/ClassLoader;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // sun.misc.InnocuousThread this
         0: .line 54
            invokestatic java.lang.ClassLoader.getSystemClassLoader:()Ljava/lang/ClassLoader;
            areturn
        end local 0 // sun.misc.InnocuousThread this
      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 // sun.misc.InnocuousThread this
        start local 1 // java.lang.Thread$UncaughtExceptionHandler x
         0: .line 60
            return
        end local 1 // java.lang.Thread$UncaughtExceptionHandler x
        end local 0 // sun.misc.InnocuousThread this
      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 // sun.misc.InnocuousThread this
        start local 1 // java.lang.ClassLoader cl
         0: .line 64
            new java.lang.SecurityException
            dup
            ldc "setContextClassLoader"
            invokespecial java.lang.SecurityException.<init>:(Ljava/lang/String;)V
            athrow
        end local 1 // java.lang.ClassLoader cl
        end local 0 // sun.misc.InnocuousThread this
      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 // sun.misc.InnocuousThread this
         0: .line 72
            invokestatic java.lang.Thread.currentThread:()Ljava/lang/Thread;
            aload 0 /* this */
            if_acmpne 3
            aload 0 /* this */
            getfield sun.misc.InnocuousThread.hasRun:Z
            ifne 3
         1: .line 73
            aload 0 /* this */
            iconst_1
            putfield sun.misc.InnocuousThread.hasRun:Z
         2: .line 74
            aload 0 /* this */
            invokespecial java.lang.Thread.run:()V
         3: .line 76
      StackMap locals:
      StackMap stack:
            return
        end local 0 // sun.misc.InnocuousThread this
      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 // sun.misc.InnocuousThread this
         0: .line 82
            getstatic sun.misc.InnocuousThread.UNSAFE:Lsun/misc/Unsafe;
            aload 0 /* this */
            getstatic sun.misc.InnocuousThread.THREADLOCALS:J
            aconst_null
            invokevirtual sun.misc.Unsafe.putObject:(Ljava/lang/Object;JLjava/lang/Object;)V
         1: .line 83
            getstatic sun.misc.InnocuousThread.UNSAFE:Lsun/misc/Unsafe;
            aload 0 /* this */
            getstatic sun.misc.InnocuousThread.INHERITABLETHREADLOCALS:J
            aconst_null
            invokevirtual sun.misc.Unsafe.putObject:(Ljava/lang/Object;JLjava/lang/Object;)V
         2: .line 84
            return
        end local 0 // sun.misc.InnocuousThread this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    3     0  this  Lsun/misc/InnocuousThread;
}
SourceFile: "InnocuousThread.java"
InnerClasses:
  public abstract UncaughtExceptionHandler = java.lang.Thread$UncaughtExceptionHandler of java.lang.Thread