public abstract class com.sun.jmx.remote.internal.ClientCommunicatorAdmin
  minor version: 0
  major version: 59
  flags: flags: (0x0421) ACC_PUBLIC, ACC_SUPER, ACC_ABSTRACT
  this_class: com.sun.jmx.remote.internal.ClientCommunicatorAdmin
  super_class: java.lang.Object
{
  private static volatile long threadNo;
    descriptor: J
    flags: (0x004a) ACC_PRIVATE, ACC_STATIC, ACC_VOLATILE

  private final com.sun.jmx.remote.internal.ClientCommunicatorAdmin$Checker checker;
    descriptor: Lcom/sun/jmx/remote/internal/ClientCommunicatorAdmin$Checker;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private long period;
    descriptor: J
    flags: (0x0002) ACC_PRIVATE

  private static final int CONNECTED;
    descriptor: I
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    ConstantValue: 0

  private static final int RE_CONNECTING;
    descriptor: I
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    ConstantValue: 1

  private static final int FAILED;
    descriptor: I
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    ConstantValue: 2

  private static final int TERMINATED;
    descriptor: I
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    ConstantValue: 3

  private int state;
    descriptor: I
    flags: (0x0002) ACC_PRIVATE

  private final int[] lock;
    descriptor: [I
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private static final com.sun.jmx.remote.util.ClassLogger logger;
    descriptor: Lcom/sun/jmx/remote/util/ClassLogger;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL

  static void <clinit>();
    descriptor: ()V
    flags: (0x0008) ACC_STATIC
    Code:
      stack=4, locals=0, args_size=0
         0: .line 35
            lconst_1
            putstatic com.sun.jmx.remote.internal.ClientCommunicatorAdmin.threadNo:J
         1: .line 251
            new com.sun.jmx.remote.util.ClassLogger
            dup
            ldc "javax.management.remote.misc"
         2: .line 252
            ldc "ClientCommunicatorAdmin"
         3: .line 251
            invokespecial com.sun.jmx.remote.util.ClassLogger.<init>:(Ljava/lang/String;Ljava/lang/String;)V
         4: .line 250
            putstatic com.sun.jmx.remote.internal.ClientCommunicatorAdmin.logger:Lcom/sun/jmx/remote/util/ClassLogger;
         5: .line 252
            return
      LocalVariableTable:
        Start  End  Slot  Name  Signature

  public void <init>(long);
    descriptor: (J)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=8, locals=4, args_size=2
        start local 0 // com.sun.jmx.remote.internal.ClientCommunicatorAdmin this
        start local 1 // long period
         0: .line 37
            aload 0 /* this */
            invokespecial java.lang.Object.<init>:()V
         1: .line 246
            aload 0 /* this */
            iconst_0
            putfield com.sun.jmx.remote.internal.ClientCommunicatorAdmin.state:I
         2: .line 248
            aload 0 /* this */
            iconst_0
            newarray 10
            putfield com.sun.jmx.remote.internal.ClientCommunicatorAdmin.lock:[I
         3: .line 38
            aload 0 /* this */
            lload 1 /* period */
            putfield com.sun.jmx.remote.internal.ClientCommunicatorAdmin.period:J
         4: .line 40
            lload 1 /* period */
            lconst_0
            lcmp
            ifle 10
         5: .line 41
            aload 0 /* this */
            new com.sun.jmx.remote.internal.ClientCommunicatorAdmin$Checker
            dup
            aload 0 /* this */
            invokespecial com.sun.jmx.remote.internal.ClientCommunicatorAdmin$Checker.<init>:(Lcom/sun/jmx/remote/internal/ClientCommunicatorAdmin;)V
            putfield com.sun.jmx.remote.internal.ClientCommunicatorAdmin.checker:Lcom/sun/jmx/remote/internal/ClientCommunicatorAdmin$Checker;
         6: .line 43
            new java.lang.Thread
            dup
            aload 0 /* this */
            getfield com.sun.jmx.remote.internal.ClientCommunicatorAdmin.checker:Lcom/sun/jmx/remote/internal/ClientCommunicatorAdmin$Checker;
            new java.lang.StringBuilder
            dup
            ldc "JMX client heartbeat "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            getstatic com.sun.jmx.remote.internal.ClientCommunicatorAdmin.threadNo:J
            lconst_1
            ladd
            dup2
            putstatic com.sun.jmx.remote.internal.ClientCommunicatorAdmin.threadNo:J
            invokevirtual java.lang.StringBuilder.append:(J)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokespecial java.lang.Thread.<init>:(Ljava/lang/Runnable;Ljava/lang/String;)V
            astore 3 /* t */
        start local 3 // java.lang.Thread t
         7: .line 44
            aload 3 /* t */
            iconst_1
            invokevirtual java.lang.Thread.setDaemon:(Z)V
         8: .line 45
            aload 3 /* t */
            invokevirtual java.lang.Thread.start:()V
        end local 3 // java.lang.Thread t
         9: .line 46
            goto 11
        10: .line 47
      StackMap locals: com.sun.jmx.remote.internal.ClientCommunicatorAdmin long
      StackMap stack:
            aload 0 /* this */
            aconst_null
            putfield com.sun.jmx.remote.internal.ClientCommunicatorAdmin.checker:Lcom/sun/jmx/remote/internal/ClientCommunicatorAdmin$Checker;
        11: .line 48
      StackMap locals:
      StackMap stack:
            return
        end local 1 // long period
        end local 0 // com.sun.jmx.remote.internal.ClientCommunicatorAdmin this
      LocalVariableTable:
        Start  End  Slot    Name  Signature
            0   12     0    this  Lcom/sun/jmx/remote/internal/ClientCommunicatorAdmin;
            0   12     1  period  J
            7    9     3       t  Ljava/lang/Thread;
    MethodParameters:
        Name  Flags
      period  

  public void gotIOException(java.io.IOException);
    descriptor: (Ljava/io/IOException;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // com.sun.jmx.remote.internal.ClientCommunicatorAdmin this
        start local 1 // java.io.IOException ioe
         0: .line 54
            aload 0 /* this */
            aload 1 /* ioe */
            invokevirtual com.sun.jmx.remote.internal.ClientCommunicatorAdmin.restart:(Ljava/io/IOException;)V
         1: .line 55
            return
        end local 1 // java.io.IOException ioe
        end local 0 // com.sun.jmx.remote.internal.ClientCommunicatorAdmin this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    2     0  this  Lcom/sun/jmx/remote/internal/ClientCommunicatorAdmin;
            0    2     1   ioe  Ljava/io/IOException;
    Exceptions:
      throws java.io.IOException
    MethodParameters:
      Name  Flags
      ioe   

  protected abstract void checkConnection();
    descriptor: ()V
    flags: (0x0404) ACC_PROTECTED, ACC_ABSTRACT
    Exceptions:
      throws java.io.IOException

  protected abstract void doStart();
    descriptor: ()V
    flags: (0x0404) ACC_PROTECTED, ACC_ABSTRACT
    Exceptions:
      throws java.io.IOException

  protected abstract void doStop();
    descriptor: ()V
    flags: (0x0404) ACC_PROTECTED, ACC_ABSTRACT

  public void terminate();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=1
        start local 0 // com.sun.jmx.remote.internal.ClientCommunicatorAdmin this
         0: .line 76
            aload 0 /* this */
            getfield com.sun.jmx.remote.internal.ClientCommunicatorAdmin.lock:[I
            dup
            astore 1
            monitorenter
         1: .line 77
            aload 0 /* this */
            getfield com.sun.jmx.remote.internal.ClientCommunicatorAdmin.state:I
            iconst_3
            if_icmpne 4
         2: .line 78
            aload 1
            monitorexit
         3: return
         4: .line 81
      StackMap locals: int[]
      StackMap stack:
            aload 0 /* this */
            iconst_3
            putfield com.sun.jmx.remote.internal.ClientCommunicatorAdmin.state:I
         5: .line 83
            aload 0 /* this */
            getfield com.sun.jmx.remote.internal.ClientCommunicatorAdmin.lock:[I
            invokevirtual java.lang.Object.notifyAll:()V
         6: .line 85
            aload 0 /* this */
            getfield com.sun.jmx.remote.internal.ClientCommunicatorAdmin.checker:Lcom/sun/jmx/remote/internal/ClientCommunicatorAdmin$Checker;
            ifnull 8
         7: .line 86
            aload 0 /* this */
            getfield com.sun.jmx.remote.internal.ClientCommunicatorAdmin.checker:Lcom/sun/jmx/remote/internal/ClientCommunicatorAdmin$Checker;
            invokevirtual com.sun.jmx.remote.internal.ClientCommunicatorAdmin$Checker.stop:()V
         8: .line 76
      StackMap locals:
      StackMap stack:
            aload 1
            monitorexit
         9: goto 12
      StackMap locals:
      StackMap stack: java.lang.Throwable
        10: aload 1
            monitorexit
        11: athrow
        12: .line 88
      StackMap locals:
      StackMap stack:
            return
        end local 0 // com.sun.jmx.remote.internal.ClientCommunicatorAdmin this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0   13     0  this  Lcom/sun/jmx/remote/internal/ClientCommunicatorAdmin;
      Exception table:
        from    to  target  type
           1     3      10  any
           4     9      10  any
          10    11      10  any

  private void restart(java.io.IOException);
    descriptor: (Ljava/io/IOException;)V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=5, locals=5, args_size=2
        start local 0 // com.sun.jmx.remote.internal.ClientCommunicatorAdmin this
        start local 1 // java.io.IOException ioe
         0: .line 92
            aload 0 /* this */
            getfield com.sun.jmx.remote.internal.ClientCommunicatorAdmin.lock:[I
            dup
            astore 2
            monitorenter
         1: .line 93
            aload 0 /* this */
            getfield com.sun.jmx.remote.internal.ClientCommunicatorAdmin.state:I
            iconst_3
            if_icmpne 3
         2: .line 94
            new java.io.IOException
            dup
            ldc "The client has been closed."
            invokespecial java.io.IOException.<init>:(Ljava/lang/String;)V
            athrow
         3: .line 95
      StackMap locals: int[]
      StackMap stack:
            aload 0 /* this */
            getfield com.sun.jmx.remote.internal.ClientCommunicatorAdmin.state:I
            iconst_2
            if_icmpne 5
         4: .line 96
            aload 1 /* ioe */
            athrow
         5: .line 97
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield com.sun.jmx.remote.internal.ClientCommunicatorAdmin.state:I
            iconst_1
            if_icmpne 20
         6: .line 100
            goto 13
         7: .line 102
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield com.sun.jmx.remote.internal.ClientCommunicatorAdmin.lock:[I
            invokevirtual java.lang.Object.wait:()V
         8: .line 103
            goto 13
      StackMap locals:
      StackMap stack: java.lang.InterruptedException
         9: astore 3 /* ire */
        start local 3 // java.lang.InterruptedException ire
        10: .line 105
            new java.io.InterruptedIOException
            dup
            aload 3 /* ire */
            invokevirtual java.lang.InterruptedException.toString:()Ljava/lang/String;
            invokespecial java.io.InterruptedIOException.<init>:(Ljava/lang/String;)V
            astore 4 /* iioe */
        start local 4 // java.io.InterruptedIOException iioe
        11: .line 106
            aload 4 /* iioe */
            aload 3 /* ire */
            invokestatic com.sun.jmx.remote.util.EnvHelp.initCause:(Ljava/lang/Throwable;Ljava/lang/Throwable;)Ljava/lang/Throwable;
            pop
        12: .line 108
            aload 4 /* iioe */
            athrow
        end local 4 // java.io.InterruptedIOException iioe
        end local 3 // java.lang.InterruptedException ire
        13: .line 100
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield com.sun.jmx.remote.internal.ClientCommunicatorAdmin.state:I
            iconst_1
            if_icmpeq 7
        14: .line 112
            aload 0 /* this */
            getfield com.sun.jmx.remote.internal.ClientCommunicatorAdmin.state:I
            iconst_3
            if_icmpne 16
        15: .line 113
            new java.io.IOException
            dup
            ldc "The client has been closed."
            invokespecial java.io.IOException.<init>:(Ljava/lang/String;)V
            athrow
        16: .line 114
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield com.sun.jmx.remote.internal.ClientCommunicatorAdmin.state:I
            ifeq 18
        17: .line 116
            aload 1 /* ioe */
            athrow
        18: .line 118
      StackMap locals:
      StackMap stack:
            aload 2
            monitorexit
        19: return
        20: .line 120
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            iconst_1
            putfield com.sun.jmx.remote.internal.ClientCommunicatorAdmin.state:I
        21: .line 121
            aload 0 /* this */
            getfield com.sun.jmx.remote.internal.ClientCommunicatorAdmin.lock:[I
            invokevirtual java.lang.Object.notifyAll:()V
        22: .line 92
            aload 2
            monitorexit
        23: goto 26
      StackMap locals:
      StackMap stack: java.lang.Throwable
        24: aload 2
            monitorexit
        25: athrow
        26: .line 127
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            invokevirtual com.sun.jmx.remote.internal.ClientCommunicatorAdmin.doStart:()V
        27: .line 128
            aload 0 /* this */
            getfield com.sun.jmx.remote.internal.ClientCommunicatorAdmin.lock:[I
            dup
            astore 2
            monitorenter
        28: .line 129
            aload 0 /* this */
            getfield com.sun.jmx.remote.internal.ClientCommunicatorAdmin.state:I
            iconst_3
            if_icmpne 30
        29: .line 130
            new java.io.IOException
            dup
            ldc "The client has been closed."
            invokespecial java.io.IOException.<init>:(Ljava/lang/String;)V
            athrow
        30: .line 133
      StackMap locals: int[]
      StackMap stack:
            aload 0 /* this */
            iconst_0
            putfield com.sun.jmx.remote.internal.ClientCommunicatorAdmin.state:I
        31: .line 135
            aload 0 /* this */
            getfield com.sun.jmx.remote.internal.ClientCommunicatorAdmin.lock:[I
            invokevirtual java.lang.Object.notifyAll:()V
        32: .line 128
            aload 2
            monitorexit
        33: goto 36
      StackMap locals:
      StackMap stack: java.lang.Throwable
        34: aload 2
            monitorexit
        35: athrow
        36: .line 138
      StackMap locals:
      StackMap stack:
            return
        37: .line 139
      StackMap locals:
      StackMap stack: java.lang.Exception
            astore 2 /* e */
        start local 2 // java.lang.Exception e
        38: .line 140
            getstatic com.sun.jmx.remote.internal.ClientCommunicatorAdmin.logger:Lcom/sun/jmx/remote/util/ClassLogger;
            ldc "restart"
            new java.lang.StringBuilder
            dup
            ldc "Failed to restart: "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 2 /* e */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokevirtual com.sun.jmx.remote.util.ClassLogger.warning:(Ljava/lang/String;Ljava/lang/String;)V
        39: .line 141
            getstatic com.sun.jmx.remote.internal.ClientCommunicatorAdmin.logger:Lcom/sun/jmx/remote/util/ClassLogger;
            ldc "restart"
            aload 2 /* e */
            invokevirtual com.sun.jmx.remote.util.ClassLogger.debug:(Ljava/lang/String;Ljava/lang/Throwable;)V
        40: .line 143
            aload 0 /* this */
            getfield com.sun.jmx.remote.internal.ClientCommunicatorAdmin.lock:[I
            dup
            astore 3
            monitorenter
        41: .line 144
            aload 0 /* this */
            getfield com.sun.jmx.remote.internal.ClientCommunicatorAdmin.state:I
            iconst_3
            if_icmpne 43
        42: .line 145
            new java.io.IOException
            dup
            ldc "The client has been closed."
            invokespecial java.io.IOException.<init>:(Ljava/lang/String;)V
            athrow
        43: .line 148
      StackMap locals: java.lang.Exception int[]
      StackMap stack:
            aload 0 /* this */
            iconst_2
            putfield com.sun.jmx.remote.internal.ClientCommunicatorAdmin.state:I
        44: .line 150
            aload 0 /* this */
            getfield com.sun.jmx.remote.internal.ClientCommunicatorAdmin.lock:[I
            invokevirtual java.lang.Object.notifyAll:()V
        45: .line 143
            aload 3
            monitorexit
        46: goto 49
      StackMap locals:
      StackMap stack: java.lang.Throwable
        47: aload 3
            monitorexit
        48: athrow
        49: .line 154
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            invokevirtual com.sun.jmx.remote.internal.ClientCommunicatorAdmin.doStop:()V
        50: .line 155
            goto 52
      StackMap locals:
      StackMap stack: java.lang.Exception
        51: pop
        52: .line 160
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            invokevirtual com.sun.jmx.remote.internal.ClientCommunicatorAdmin.terminate:()V
        53: .line 162
            aload 1 /* ioe */
            athrow
        end local 2 // java.lang.Exception e
        end local 1 // java.io.IOException ioe
        end local 0 // com.sun.jmx.remote.internal.ClientCommunicatorAdmin this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0   54     0  this  Lcom/sun/jmx/remote/internal/ClientCommunicatorAdmin;
            0   54     1   ioe  Ljava/io/IOException;
           10   13     3   ire  Ljava/lang/InterruptedException;
           11   13     4  iioe  Ljava/io/InterruptedIOException;
           38   54     2     e  Ljava/lang/Exception;
      Exception table:
        from    to  target  type
           7     8       9  Class java.lang.InterruptedException
           1    19      24  any
          20    23      24  any
          24    25      24  any
          28    33      34  any
          34    35      34  any
          26    36      37  Class java.lang.Exception
          41    46      47  any
          47    48      47  any
          49    50      51  Class java.lang.Exception
    Exceptions:
      throws java.io.IOException
    MethodParameters:
      Name  Flags
      ioe   
}
SourceFile: "ClientCommunicatorAdmin.java"
NestMembers:
  com.sun.jmx.remote.internal.ClientCommunicatorAdmin$Checker
InnerClasses:
  private Checker = com.sun.jmx.remote.internal.ClientCommunicatorAdmin$Checker of com.sun.jmx.remote.internal.ClientCommunicatorAdmin