class java.util.TimerThread extends java.lang.Thread
  minor version: 0
  major version: 59
  flags: flags: (0x0020) ACC_SUPER
  this_class: java.util.TimerThread
  super_class: java.lang.Thread
{
  boolean newTasksMayBeScheduled;
    descriptor: Z
    flags: (0x0000) 

  private java.util.TaskQueue queue;
    descriptor: Ljava/util/TaskQueue;
    flags: (0x0002) ACC_PRIVATE

  void <init>(java.util.TaskQueue);
    descriptor: (Ljava/util/TaskQueue;)V
    flags: (0x0000) 
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // java.util.TimerThread this
        start local 1 // java.util.TaskQueue queue
         0: .line 500
            aload 0 /* this */
            invokespecial java.lang.Thread.<init>:()V
         1: .line 490
            aload 0 /* this */
            iconst_1
            putfield java.util.TimerThread.newTasksMayBeScheduled:Z
         2: .line 501
            aload 0 /* this */
            aload 1 /* queue */
            putfield java.util.TimerThread.queue:Ljava/util/TaskQueue;
         3: .line 502
            return
        end local 1 // java.util.TaskQueue queue
        end local 0 // java.util.TimerThread this
      LocalVariableTable:
        Start  End  Slot   Name  Signature
            0    4     0   this  Ljava/util/TimerThread;
            0    4     1  queue  Ljava/util/TaskQueue;
    MethodParameters:
       Name  Flags
      queue  

  public void run();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=3, args_size=1
        start local 0 // java.util.TimerThread this
         0: .line 506
            aload 0 /* this */
            invokevirtual java.util.TimerThread.mainLoop:()V
         1: .line 507
            goto 11
      StackMap locals:
      StackMap stack: java.lang.Throwable
         2: astore 1
         3: .line 509
            aload 0 /* this */
            getfield java.util.TimerThread.queue:Ljava/util/TaskQueue;
            dup
            astore 2
            monitorenter
         4: .line 510
            aload 0 /* this */
            iconst_0
            putfield java.util.TimerThread.newTasksMayBeScheduled:Z
         5: .line 511
            aload 0 /* this */
            getfield java.util.TimerThread.queue:Ljava/util/TaskQueue;
            invokevirtual java.util.TaskQueue.clear:()V
         6: .line 509
            aload 2
            monitorexit
         7: goto 10
      StackMap locals: java.util.TimerThread java.lang.Throwable java.util.TaskQueue
      StackMap stack: java.lang.Throwable
         8: aload 2
            monitorexit
         9: athrow
        10: .line 513
      StackMap locals:
      StackMap stack:
            aload 1
            athrow
        11: .line 509
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield java.util.TimerThread.queue:Ljava/util/TaskQueue;
            dup
            astore 2
            monitorenter
        12: .line 510
            aload 0 /* this */
            iconst_0
            putfield java.util.TimerThread.newTasksMayBeScheduled:Z
        13: .line 511
            aload 0 /* this */
            getfield java.util.TimerThread.queue:Ljava/util/TaskQueue;
            invokevirtual java.util.TaskQueue.clear:()V
        14: .line 509
            aload 2
            monitorexit
        15: goto 18
      StackMap locals: java.util.TimerThread top java.util.TaskQueue
      StackMap stack: java.lang.Throwable
        16: aload 2
            monitorexit
        17: athrow
        18: .line 514
      StackMap locals: java.util.TimerThread
      StackMap stack:
            return
        end local 0 // java.util.TimerThread this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0   19     0  this  Ljava/util/TimerThread;
      Exception table:
        from    to  target  type
           0     2       2  any
           4     7       8  any
           8     9       8  any
          12    15      16  any
          16    17      16  any

  private void mainLoop();
    descriptor: ()V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=5, locals=9, args_size=1
        start local 0 // java.util.TimerThread this
         0: .line 524
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield java.util.TimerThread.queue:Ljava/util/TaskQueue;
            dup
            astore 3
            monitorenter
         1: .line 526
            goto 3
         2: .line 527
      StackMap locals: java.util.TimerThread top top java.util.TaskQueue
      StackMap stack:
            aload 0 /* this */
            getfield java.util.TimerThread.queue:Ljava/util/TaskQueue;
            invokevirtual java.lang.Object.wait:()V
         3: .line 526
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield java.util.TimerThread.queue:Ljava/util/TaskQueue;
            invokevirtual java.util.TaskQueue.isEmpty:()Z
            ifeq 4
            aload 0 /* this */
            getfield java.util.TimerThread.newTasksMayBeScheduled:Z
            ifne 2
         4: .line 528
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield java.util.TimerThread.queue:Ljava/util/TaskQueue;
            invokevirtual java.util.TaskQueue.isEmpty:()Z
            ifeq 7
         5: .line 529
            aload 3
            monitorexit
         6: goto 43
         7: .line 533
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield java.util.TimerThread.queue:Ljava/util/TaskQueue;
            invokevirtual java.util.TaskQueue.getMin:()Ljava/util/TimerTask;
            astore 1 /* task */
        start local 1 // java.util.TimerTask task
         8: .line 534
            aload 1 /* task */
            getfield java.util.TimerTask.lock:Ljava/lang/Object;
            dup
            astore 8
            monitorenter
         9: .line 535
            aload 1 /* task */
            getfield java.util.TimerTask.state:I
            iconst_3
            if_icmpne 14
        10: .line 536
            aload 0 /* this */
            getfield java.util.TimerThread.queue:Ljava/util/TaskQueue;
            invokevirtual java.util.TaskQueue.removeMin:()V
        11: .line 537
            aload 8
            monitorexit
        12: aload 3
            monitorexit
        13: goto 0
        14: .line 539
      StackMap locals: java.util.TimerThread java.util.TimerTask top java.util.TaskQueue top top top top java.lang.Object
      StackMap stack:
            invokestatic java.lang.System.currentTimeMillis:()J
            lstore 4 /* currentTime */
        start local 4 // long currentTime
        15: .line 540
            aload 1 /* task */
            getfield java.util.TimerTask.nextExecutionTime:J
            lstore 6 /* executionTime */
        start local 6 // long executionTime
        16: .line 541
            lload 6 /* executionTime */
            lload 4 /* currentTime */
            lcmp
            ifgt 17
            iconst_1
            goto 18
      StackMap locals: java.util.TimerThread java.util.TimerTask top java.util.TaskQueue long long java.lang.Object
      StackMap stack:
        17: iconst_0
      StackMap locals:
      StackMap stack: int
        18: dup
            istore 2 /* taskFired */
        start local 2 // boolean taskFired
        19: ifeq 28
        20: .line 542
            aload 1 /* task */
            getfield java.util.TimerTask.period:J
            lconst_0
            lcmp
            ifne 24
        21: .line 543
            aload 0 /* this */
            getfield java.util.TimerThread.queue:Ljava/util/TaskQueue;
            invokevirtual java.util.TaskQueue.removeMin:()V
        22: .line 544
            aload 1 /* task */
            iconst_2
            putfield java.util.TimerTask.state:I
        23: .line 545
            goto 28
        24: .line 546
      StackMap locals: java.util.TimerThread java.util.TimerTask int java.util.TaskQueue long long java.lang.Object
      StackMap stack:
            aload 0 /* this */
            getfield java.util.TimerThread.queue:Ljava/util/TaskQueue;
        25: .line 547
            aload 1 /* task */
            getfield java.util.TimerTask.period:J
            lconst_0
            lcmp
            ifge 26
            lload 4 /* currentTime */
            aload 1 /* task */
            getfield java.util.TimerTask.period:J
            lsub
            goto 27
        26: .line 548
      StackMap locals:
      StackMap stack: java.util.TaskQueue
            lload 6 /* executionTime */
            aload 1 /* task */
            getfield java.util.TimerTask.period:J
            ladd
        27: .line 546
      StackMap locals: java.util.TimerThread java.util.TimerTask int java.util.TaskQueue long long java.lang.Object
      StackMap stack: java.util.TaskQueue long
            invokevirtual java.util.TaskQueue.rescheduleMin:(J)V
        28: .line 534
      StackMap locals:
      StackMap stack:
            aload 8
            monitorexit
        29: goto 32
        end local 6 // long executionTime
        end local 4 // long currentTime
        end local 2 // boolean taskFired
      StackMap locals: java.util.TimerThread java.util.TimerTask top java.util.TaskQueue top top top top java.lang.Object
      StackMap stack: java.lang.Throwable
        30: aload 8
            monitorexit
        31: athrow
        start local 2 // boolean taskFired
        start local 4 // long currentTime
        start local 6 // long executionTime
        32: .line 552
      StackMap locals: java.util.TimerThread java.util.TimerTask int java.util.TaskQueue long long
      StackMap stack:
            iload 2 /* taskFired */
            ifne 34
        33: .line 553
            aload 0 /* this */
            getfield java.util.TimerThread.queue:Ljava/util/TaskQueue;
            lload 6 /* executionTime */
            lload 4 /* currentTime */
            lsub
            invokevirtual java.lang.Object.wait:(J)V
        end local 6 // long executionTime
        end local 4 // long currentTime
        34: .line 524
      StackMap locals:
      StackMap stack:
            aload 3
            monitorexit
        35: goto 38
        end local 2 // boolean taskFired
        end local 1 // java.util.TimerTask task
      StackMap locals: java.util.TimerThread top top java.util.TaskQueue
      StackMap stack: java.lang.Throwable
        36: aload 3
            monitorexit
        37: athrow
        start local 1 // java.util.TimerTask task
        start local 2 // boolean taskFired
        38: .line 555
      StackMap locals: java.util.TimerThread java.util.TimerTask int
      StackMap stack:
            iload 2 /* taskFired */
            ifeq 0
        39: .line 556
            aload 1 /* task */
            invokevirtual java.util.TimerTask.run:()V
        end local 2 // boolean taskFired
        end local 1 // java.util.TimerTask task
        40: .line 557
            goto 0
      StackMap locals: java.util.TimerThread
      StackMap stack: java.lang.InterruptedException
        41: pop
        42: .line 520
            goto 0
        43: .line 560
      StackMap locals:
      StackMap stack:
            return
        end local 0 // java.util.TimerThread this
      LocalVariableTable:
        Start  End  Slot           Name  Signature
            0   44     0           this  Ljava/util/TimerThread;
            8   36     1           task  Ljava/util/TimerTask;
           38   40     1           task  Ljava/util/TimerTask;
           19   30     2      taskFired  Z
           32   36     2      taskFired  Z
           38   40     2      taskFired  Z
           15   30     4    currentTime  J
           32   34     4    currentTime  J
           16   30     6  executionTime  J
           32   34     6  executionTime  J
      Exception table:
        from    to  target  type
           9    12      30  any
          14    29      30  any
          30    31      30  any
           1     6      36  any
           7    13      36  any
          14    35      36  any
          36    37      36  any
           0     6      41  Class java.lang.InterruptedException
           7    13      41  Class java.lang.InterruptedException
          14    40      41  Class java.lang.InterruptedException
}
SourceFile: "Timer.java"