class javax.management.monitor.Monitor$MonitorTask implements java.lang.Runnable
  minor version: 0
  major version: 59
  flags: flags: (0x0020) ACC_SUPER
  this_class: javax.management.monitor.Monitor$MonitorTask
  super_class: java.lang.Object
{
  private java.util.concurrent.ThreadPoolExecutor executor;
    descriptor: Ljava/util/concurrent/ThreadPoolExecutor;
    flags: (0x0002) ACC_PRIVATE

  final javax.management.monitor.Monitor this$0;
    descriptor: Ljavax/management/monitor/Monitor;
    flags: (0x1010) ACC_FINAL, ACC_SYNTHETIC

  public void <init>(javax.management.monitor.Monitor);
    descriptor: (Ljavax/management/monitor/Monitor;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=14, locals=9, args_size=2
        start local 0 // javax.management.monitor.Monitor$MonitorTask this
         0: .line 1487
            aload 0 /* this */
            aload 1
            putfield javax.management.monitor.Monitor$MonitorTask.this$0:Ljavax/management/monitor/Monitor;
            aload 0 /* this */
            invokespecial java.lang.Object.<init>:()V
         1: .line 1494
            invokestatic java.lang.System.getSecurityManager:()Ljava/lang/SecurityManager;
            astore 2 /* s */
        start local 2 // java.lang.SecurityManager s
         2: .line 1495
            aload 2 /* s */
            ifnull 3
            aload 2 /* s */
            invokevirtual java.lang.SecurityManager.getThreadGroup:()Ljava/lang/ThreadGroup;
            goto 4
         3: .line 1496
      StackMap locals: javax.management.monitor.Monitor$MonitorTask javax.management.monitor.Monitor java.lang.SecurityManager
      StackMap stack:
            invokestatic java.lang.Thread.currentThread:()Ljava/lang/Thread;
            invokevirtual java.lang.Thread.getThreadGroup:()Ljava/lang/ThreadGroup;
         4: .line 1495
      StackMap locals:
      StackMap stack: java.lang.ThreadGroup
            astore 3 /* group */
        start local 3 // java.lang.ThreadGroup group
         5: .line 1497
            getstatic javax.management.monitor.Monitor.executorsLock:Ljava/lang/Object;
            dup
            astore 4
            monitorenter
         6: .line 1498
            getstatic javax.management.monitor.Monitor.executors:Ljava/util/Map;
            invokeinterface java.util.Map.keySet:()Ljava/util/Set;
            invokeinterface java.util.Set.iterator:()Ljava/util/Iterator;
            astore 6
            goto 14
      StackMap locals: javax.management.monitor.Monitor$MonitorTask javax.management.monitor.Monitor java.lang.SecurityManager java.lang.ThreadGroup java.lang.Object top java.util.Iterator
      StackMap stack:
         7: aload 6
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast java.util.concurrent.ThreadPoolExecutor
            astore 5 /* e */
        start local 5 // java.util.concurrent.ThreadPoolExecutor e
         8: .line 1500
            aload 5 /* e */
            invokevirtual java.util.concurrent.ThreadPoolExecutor.getThreadFactory:()Ljava/util/concurrent/ThreadFactory;
            checkcast javax.management.monitor.Monitor$DaemonThreadFactory
         9: .line 1499
            astore 7 /* tf */
        start local 7 // javax.management.monitor.Monitor$DaemonThreadFactory tf
        10: .line 1501
            aload 7 /* tf */
            invokevirtual javax.management.monitor.Monitor$DaemonThreadFactory.getThreadGroup:()Ljava/lang/ThreadGroup;
            astore 8 /* tg */
        start local 8 // java.lang.ThreadGroup tg
        11: .line 1502
            aload 8 /* tg */
            aload 3 /* group */
            if_acmpne 14
        12: .line 1503
            aload 0 /* this */
            aload 5 /* e */
            putfield javax.management.monitor.Monitor$MonitorTask.executor:Ljava/util/concurrent/ThreadPoolExecutor;
        13: .line 1504
            goto 15
        end local 8 // java.lang.ThreadGroup tg
        end local 7 // javax.management.monitor.Monitor$DaemonThreadFactory tf
        end local 5 // java.util.concurrent.ThreadPoolExecutor e
        14: .line 1498
      StackMap locals:
      StackMap stack:
            aload 6
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 7
        15: .line 1507
      StackMap locals: javax.management.monitor.Monitor$MonitorTask javax.management.monitor.Monitor java.lang.SecurityManager java.lang.ThreadGroup java.lang.Object
      StackMap stack:
            aload 0 /* this */
            getfield javax.management.monitor.Monitor$MonitorTask.executor:Ljava/util/concurrent/ThreadPoolExecutor;
            ifnonnull 28
        16: .line 1508
            aload 0 /* this */
            new java.util.concurrent.ThreadPoolExecutor
            dup
        17: .line 1509
            getstatic javax.management.monitor.Monitor.maximumPoolSize:I
        18: .line 1510
            getstatic javax.management.monitor.Monitor.maximumPoolSize:I
        19: .line 1511
            ldc 60
        20: .line 1512
            getstatic java.util.concurrent.TimeUnit.SECONDS:Ljava/util/concurrent/TimeUnit;
        21: .line 1513
            new java.util.concurrent.LinkedBlockingQueue
            dup
            invokespecial java.util.concurrent.LinkedBlockingQueue.<init>:()V
        22: .line 1514
            new javax.management.monitor.Monitor$DaemonThreadFactory
            dup
            new java.lang.StringBuilder
            dup
            ldc "ThreadGroup<"
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
        23: .line 1515
            aload 3 /* group */
            invokevirtual java.lang.ThreadGroup.getName:()Ljava/lang/String;
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            ldc "> Executor"
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            aload 3 /* group */
        24: .line 1514
            invokespecial javax.management.monitor.Monitor$DaemonThreadFactory.<init>:(Ljava/lang/String;Ljava/lang/ThreadGroup;)V
            invokespecial java.util.concurrent.ThreadPoolExecutor.<init>:(IIJLjava/util/concurrent/TimeUnit;Ljava/util/concurrent/BlockingQueue;Ljava/util/concurrent/ThreadFactory;)V
        25: .line 1508
            putfield javax.management.monitor.Monitor$MonitorTask.executor:Ljava/util/concurrent/ThreadPoolExecutor;
        26: .line 1516
            aload 0 /* this */
            getfield javax.management.monitor.Monitor$MonitorTask.executor:Ljava/util/concurrent/ThreadPoolExecutor;
            iconst_1
            invokevirtual java.util.concurrent.ThreadPoolExecutor.allowCoreThreadTimeOut:(Z)V
        27: .line 1517
            getstatic javax.management.monitor.Monitor.executors:Ljava/util/Map;
            aload 0 /* this */
            getfield javax.management.monitor.Monitor$MonitorTask.executor:Ljava/util/concurrent/ThreadPoolExecutor;
            aconst_null
            invokeinterface java.util.Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
            pop
        28: .line 1497
      StackMap locals:
      StackMap stack:
            aload 4
            monitorexit
        29: goto 32
      StackMap locals:
      StackMap stack: java.lang.Throwable
        30: aload 4
            monitorexit
        31: athrow
        32: .line 1520
      StackMap locals:
      StackMap stack:
            return
        end local 3 // java.lang.ThreadGroup group
        end local 2 // java.lang.SecurityManager s
        end local 0 // javax.management.monitor.Monitor$MonitorTask this
      LocalVariableTable:
        Start  End  Slot   Name  Signature
            0   33     0   this  Ljavax/management/monitor/Monitor$MonitorTask;
            2   33     2      s  Ljava/lang/SecurityManager;
            5   33     3  group  Ljava/lang/ThreadGroup;
            8   14     5      e  Ljava/util/concurrent/ThreadPoolExecutor;
           10   14     7     tf  Ljavax/management/monitor/Monitor$DaemonThreadFactory;
           11   14     8     tg  Ljava/lang/ThreadGroup;
      Exception table:
        from    to  target  type
           6    29      30  any
          30    31      30  any
    MethodParameters:
        Name  Flags
      this$0  final

  public java.util.concurrent.Future<?> submit();
    descriptor: ()Ljava/util/concurrent/Future;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=1, args_size=1
        start local 0 // javax.management.monitor.Monitor$MonitorTask this
         0: .line 1529
            aload 0 /* this */
            getfield javax.management.monitor.Monitor$MonitorTask.executor:Ljava/util/concurrent/ThreadPoolExecutor;
            aload 0 /* this */
            invokevirtual java.util.concurrent.ThreadPoolExecutor.submit:(Ljava/lang/Runnable;)Ljava/util/concurrent/Future;
            areturn
        end local 0 // javax.management.monitor.Monitor$MonitorTask this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Ljavax/management/monitor/Monitor$MonitorTask;
    Signature: ()Ljava/util/concurrent/Future<*>;

  public void run();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=6, locals=5, args_size=1
        start local 0 // javax.management.monitor.Monitor$MonitorTask this
         0: .line 1535
            aload 0 /* this */
            getfield javax.management.monitor.Monitor$MonitorTask.this$0:Ljavax/management/monitor/Monitor;
            dup
            astore 3
            monitorenter
         1: .line 1536
            aload 0 /* this */
            getfield javax.management.monitor.Monitor$MonitorTask.this$0:Ljavax/management/monitor/Monitor;
            getfield javax.management.monitor.Monitor.schedulerFuture:Ljava/util/concurrent/ScheduledFuture;
            astore 1 /* sf */
        start local 1 // java.util.concurrent.ScheduledFuture sf
         2: .line 1537
            aload 0 /* this */
            getfield javax.management.monitor.Monitor$MonitorTask.this$0:Ljavax/management/monitor/Monitor;
            getfield javax.management.monitor.Monitor.acc:Ljava/security/AccessControlContext;
            astore 2 /* ac */
        start local 2 // java.security.AccessControlContext ac
         3: .line 1535
            aload 3
            monitorexit
         4: goto 7
        end local 2 // java.security.AccessControlContext ac
        end local 1 // java.util.concurrent.ScheduledFuture sf
      StackMap locals: javax.management.monitor.Monitor$MonitorTask top top javax.management.monitor.Monitor
      StackMap stack: java.lang.Throwable
         5: aload 3
            monitorexit
         6: athrow
        start local 1 // java.util.concurrent.ScheduledFuture sf
        start local 2 // java.security.AccessControlContext ac
         7: .line 1539
      StackMap locals: javax.management.monitor.Monitor$MonitorTask java.util.concurrent.ScheduledFuture java.security.AccessControlContext
      StackMap stack:
            new javax.management.monitor.Monitor$MonitorTask$1
            dup
            aload 0 /* this */
            invokespecial javax.management.monitor.Monitor$MonitorTask$1.<init>:(Ljavax/management/monitor/Monitor$MonitorTask;)V
            astore 3 /* action */
        start local 3 // java.security.PrivilegedAction action
         8: .line 1553
            aload 2 /* ac */
            ifnonnull 10
         9: .line 1554
            new java.lang.SecurityException
            dup
            ldc "AccessControlContext cannot be null"
            invokespecial java.lang.SecurityException.<init>:(Ljava/lang/String;)V
            athrow
        10: .line 1556
      StackMap locals: java.security.PrivilegedAction
      StackMap stack:
            aload 3 /* action */
            aload 2 /* ac */
            invokestatic java.security.AccessController.doPrivileged:(Ljava/security/PrivilegedAction;Ljava/security/AccessControlContext;)Ljava/lang/Object;
            pop
        11: .line 1557
            aload 0 /* this */
            getfield javax.management.monitor.Monitor$MonitorTask.this$0:Ljavax/management/monitor/Monitor;
            dup
            astore 4
            monitorenter
        12: .line 1558
            aload 0 /* this */
            getfield javax.management.monitor.Monitor$MonitorTask.this$0:Ljavax/management/monitor/Monitor;
            invokevirtual javax.management.monitor.Monitor.isActive:()Z
            ifeq 21
        13: .line 1559
            aload 0 /* this */
            getfield javax.management.monitor.Monitor$MonitorTask.this$0:Ljavax/management/monitor/Monitor;
            getfield javax.management.monitor.Monitor.schedulerFuture:Ljava/util/concurrent/ScheduledFuture;
            aload 1 /* sf */
            if_acmpne 21
        14: .line 1560
            aload 0 /* this */
            getfield javax.management.monitor.Monitor$MonitorTask.this$0:Ljavax/management/monitor/Monitor;
            aconst_null
            putfield javax.management.monitor.Monitor.monitorFuture:Ljava/util/concurrent/Future;
        15: .line 1561
            aload 0 /* this */
            getfield javax.management.monitor.Monitor$MonitorTask.this$0:Ljavax/management/monitor/Monitor;
        16: .line 1562
            getstatic javax.management.monitor.Monitor.scheduler:Ljava/util/concurrent/ScheduledExecutorService;
            aload 0 /* this */
            getfield javax.management.monitor.Monitor$MonitorTask.this$0:Ljavax/management/monitor/Monitor;
            getfield javax.management.monitor.Monitor.schedulerTask:Ljavax/management/monitor/Monitor$SchedulerTask;
        17: .line 1563
            aload 0 /* this */
            getfield javax.management.monitor.Monitor$MonitorTask.this$0:Ljavax/management/monitor/Monitor;
            invokevirtual javax.management.monitor.Monitor.getGranularityPeriod:()J
        18: .line 1564
            getstatic java.util.concurrent.TimeUnit.MILLISECONDS:Ljava/util/concurrent/TimeUnit;
        19: .line 1562
            invokeinterface java.util.concurrent.ScheduledExecutorService.schedule:(Ljava/lang/Runnable;JLjava/util/concurrent/TimeUnit;)Ljava/util/concurrent/ScheduledFuture;
        20: .line 1561
            putfield javax.management.monitor.Monitor.schedulerFuture:Ljava/util/concurrent/ScheduledFuture;
        21: .line 1557
      StackMap locals: javax.management.monitor.Monitor
      StackMap stack:
            aload 4
            monitorexit
        22: goto 25
      StackMap locals:
      StackMap stack: java.lang.Throwable
        23: aload 4
            monitorexit
        24: athrow
        25: .line 1567
      StackMap locals:
      StackMap stack:
            return
        end local 3 // java.security.PrivilegedAction action
        end local 2 // java.security.AccessControlContext ac
        end local 1 // java.util.concurrent.ScheduledFuture sf
        end local 0 // javax.management.monitor.Monitor$MonitorTask this
      LocalVariableTable:
        Start  End  Slot    Name  Signature
            0   26     0    this  Ljavax/management/monitor/Monitor$MonitorTask;
            2    5     1      sf  Ljava/util/concurrent/ScheduledFuture<*>;
            7   26     1      sf  Ljava/util/concurrent/ScheduledFuture<*>;
            3    5     2      ac  Ljava/security/AccessControlContext;
            7   26     2      ac  Ljava/security/AccessControlContext;
            8   26     3  action  Ljava/security/PrivilegedAction<Ljava/lang/Void;>;
      Exception table:
        from    to  target  type
           1     4       5  any
           5     6       5  any
          12    22      23  any
          23    24      23  any

  static javax.management.monitor.Monitor access$0(javax.management.monitor.Monitor$MonitorTask);
    descriptor: (Ljavax/management/monitor/Monitor$MonitorTask;)Ljavax/management/monitor/Monitor;
    flags: (0x1008) ACC_STATIC, ACC_SYNTHETIC
    Code:
      stack=1, locals=1, args_size=1
         0: .line 1477
            aload 0
            getfield javax.management.monitor.Monitor$MonitorTask.this$0:Ljavax/management/monitor/Monitor;
            areturn
      LocalVariableTable:
        Start  End  Slot  Name  Signature
}
SourceFile: "Monitor.java"
NestHost: javax.management.monitor.Monitor
InnerClasses:
  private DaemonThreadFactory = javax.management.monitor.Monitor$DaemonThreadFactory of javax.management.monitor.Monitor
  private MonitorTask = javax.management.monitor.Monitor$MonitorTask of javax.management.monitor.Monitor
  javax.management.monitor.Monitor$MonitorTask$1