class org.apache.commons.io.ThreadMonitor implements java.lang.Runnable
  minor version: 0
  major version: 59
  flags: flags: (0x0020) ACC_SUPER
  this_class: org.apache.commons.io.ThreadMonitor
  super_class: java.lang.Object
{
  private final java.lang.Thread thread;
    descriptor: Ljava/lang/Thread;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private final long timeout;
    descriptor: J
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  public static java.lang.Thread start(long);
    descriptor: (J)Ljava/lang/Thread;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=3, locals=2, args_size=1
        start local 0 // long timeout
         0: .line 54
            invokestatic java.lang.Thread.currentThread:()Ljava/lang/Thread;
            lload 0 /* timeout */
            invokestatic org.apache.commons.io.ThreadMonitor.start:(Ljava/lang/Thread;J)Ljava/lang/Thread;
            areturn
        end local 0 // long timeout
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    1     0  timeout  J
    MethodParameters:
         Name  Flags
      timeout  final

  public static java.lang.Thread start(java.lang.Thread, long);
    descriptor: (Ljava/lang/Thread;J)Ljava/lang/Thread;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=5, locals=5, args_size=2
        start local 0 // java.lang.Thread thread
        start local 1 // long timeout
         0: .line 67
            aconst_null
            astore 3 /* monitor */
        start local 3 // java.lang.Thread monitor
         1: .line 68
            lload 1 /* timeout */
            lconst_0
            lcmp
            ifle 6
         2: .line 69
            new org.apache.commons.io.ThreadMonitor
            dup
            aload 0 /* thread */
            lload 1 /* timeout */
            invokespecial org.apache.commons.io.ThreadMonitor.<init>:(Ljava/lang/Thread;J)V
            astore 4 /* timout */
        start local 4 // org.apache.commons.io.ThreadMonitor timout
         3: .line 70
            new java.lang.Thread
            dup
            aload 4 /* timout */
            ldc Lorg/apache/commons/io/ThreadMonitor;
            invokevirtual java.lang.Class.getSimpleName:()Ljava/lang/String;
            invokespecial java.lang.Thread.<init>:(Ljava/lang/Runnable;Ljava/lang/String;)V
            astore 3 /* monitor */
         4: .line 71
            aload 3 /* monitor */
            iconst_1
            invokevirtual java.lang.Thread.setDaemon:(Z)V
         5: .line 72
            aload 3 /* monitor */
            invokevirtual java.lang.Thread.start:()V
        end local 4 // org.apache.commons.io.ThreadMonitor timout
         6: .line 74
      StackMap locals: java.lang.Thread
      StackMap stack:
            aload 3 /* monitor */
            areturn
        end local 3 // java.lang.Thread monitor
        end local 1 // long timeout
        end local 0 // java.lang.Thread thread
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    7     0   thread  Ljava/lang/Thread;
            0    7     1  timeout  J
            1    7     3  monitor  Ljava/lang/Thread;
            3    6     4   timout  Lorg/apache/commons/io/ThreadMonitor;
    MethodParameters:
         Name  Flags
      thread   final
      timeout  final

  public static void stop(java.lang.Thread);
    descriptor: (Ljava/lang/Thread;)V
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // java.lang.Thread thread
         0: .line 83
            aload 0 /* thread */
            ifnull 2
         1: .line 84
            aload 0 /* thread */
            invokevirtual java.lang.Thread.interrupt:()V
         2: .line 86
      StackMap locals:
      StackMap stack:
            return
        end local 0 // java.lang.Thread thread
      LocalVariableTable:
        Start  End  Slot    Name  Signature
            0    3     0  thread  Ljava/lang/Thread;
    MethodParameters:
        Name  Flags
      thread  final

  private void <init>(java.lang.Thread, long);
    descriptor: (Ljava/lang/Thread;J)V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=3, locals=4, args_size=3
        start local 0 // org.apache.commons.io.ThreadMonitor this
        start local 1 // java.lang.Thread thread
        start local 2 // long timeout
         0: .line 94
            aload 0 /* this */
            invokespecial java.lang.Object.<init>:()V
         1: .line 95
            aload 0 /* this */
            aload 1 /* thread */
            putfield org.apache.commons.io.ThreadMonitor.thread:Ljava/lang/Thread;
         2: .line 96
            aload 0 /* this */
            lload 2 /* timeout */
            putfield org.apache.commons.io.ThreadMonitor.timeout:J
         3: .line 97
            return
        end local 2 // long timeout
        end local 1 // java.lang.Thread thread
        end local 0 // org.apache.commons.io.ThreadMonitor this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    4     0     this  Lorg/apache/commons/io/ThreadMonitor;
            0    4     1   thread  Ljava/lang/Thread;
            0    4     2  timeout  J
    MethodParameters:
         Name  Flags
      thread   final
      timeout  final

  public void run();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=1, args_size=1
        start local 0 // org.apache.commons.io.ThreadMonitor this
         0: .line 108
            aload 0 /* this */
            getfield org.apache.commons.io.ThreadMonitor.timeout:J
            invokestatic org.apache.commons.io.ThreadMonitor.sleep:(J)V
         1: .line 109
            aload 0 /* this */
            getfield org.apache.commons.io.ThreadMonitor.thread:Ljava/lang/Thread;
            invokevirtual java.lang.Thread.interrupt:()V
         2: .line 110
            goto 4
      StackMap locals:
      StackMap stack: java.lang.InterruptedException
         3: pop
         4: .line 113
      StackMap locals:
      StackMap stack:
            return
        end local 0 // org.apache.commons.io.ThreadMonitor this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    5     0  this  Lorg/apache/commons/io/ThreadMonitor;
      Exception table:
        from    to  target  type
           0     2       3  Class java.lang.InterruptedException

  private static void sleep(long);
    descriptor: (J)V
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=4, locals=6, args_size=1
        start local 0 // long ms
         0: .line 125
            invokestatic java.lang.System.currentTimeMillis:()J
            lload 0 /* ms */
            ladd
            lstore 2 /* finishAt */
        start local 2 // long finishAt
         1: .line 126
            lload 0 /* ms */
            lstore 4 /* remaining */
        start local 4 // long remaining
         2: .line 128
      StackMap locals: long long
      StackMap stack:
            lload 4 /* remaining */
            invokestatic java.lang.Thread.sleep:(J)V
         3: .line 129
            lload 2 /* finishAt */
            invokestatic java.lang.System.currentTimeMillis:()J
            lsub
            lstore 4 /* remaining */
         4: .line 130
            lload 4 /* remaining */
            lconst_0
         5: .line 127
            lcmp
            ifgt 2
         6: .line 131
            return
        end local 4 // long remaining
        end local 2 // long finishAt
        end local 0 // long ms
      LocalVariableTable:
        Start  End  Slot       Name  Signature
            0    7     0         ms  J
            1    7     2   finishAt  J
            2    7     4  remaining  J
    Exceptions:
      throws java.lang.InterruptedException
    MethodParameters:
      Name  Flags
      ms    final
}
SourceFile: "ThreadMonitor.java"