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 256
            new com.sun.jmx.remote.util.ClassLogger
            dup
            ldc "javax.management.remote.misc"
         2: .line 257
            ldc "ClientCommunicatorAdmin"
         3: .line 256
            invokespecial com.sun.jmx.remote.util.ClassLogger.<init>:(Ljava/lang/String;Ljava/lang/String;)V
         4: .line 255
            putstatic com.sun.jmx.remote.internal.ClientCommunicatorAdmin.logger:Lcom/sun/jmx/remote/util/ClassLogger;
         5: .line 257
            return
      LocalVariableTable:
        Start  End  Slot  Name  Signature

  public void <init>(long);
    descriptor: (J)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=9, 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 251
            aload 0 /* this */
            iconst_0
            putfield com.sun.jmx.remote.internal.ClientCommunicatorAdmin.state:I
         2: .line 253
            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 15
         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
            aconst_null
         7: .line 44
            aload 0 /* this */
            getfield com.sun.jmx.remote.internal.ClientCommunicatorAdmin.checker:Lcom/sun/jmx/remote/internal/ClientCommunicatorAdmin$Checker;
         8: .line 45
            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;
         9: .line 46
            lconst_0
        10: .line 47
            iconst_0
        11: .line 43
            invokespecial java.lang.Thread.<init>:(Ljava/lang/ThreadGroup;Ljava/lang/Runnable;Ljava/lang/String;JZ)V
            astore 3 /* t */
        start local 3 // java.lang.Thread t
        12: .line 49
            aload 3 /* t */
            iconst_1
            invokevirtual java.lang.Thread.setDaemon:(Z)V
        13: .line 50
            aload 3 /* t */
            invokevirtual java.lang.Thread.start:()V
        end local 3 // java.lang.Thread t
        14: .line 51
            goto 16
        15: .line 52
      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;
        16: .line 53
      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   17     0    this  Lcom/sun/jmx/remote/internal/ClientCommunicatorAdmin;
            0   17     1  period  J
           12   14     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 59
            aload 0 /* this */
            aload 1 /* ioe */
            invokevirtual com.sun.jmx.remote.internal.ClientCommunicatorAdmin.restart:(Ljava/io/IOException;)V
         1: .line 60
            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 81
            aload 0 /* this */
            getfield com.sun.jmx.remote.internal.ClientCommunicatorAdmin.lock:[I
            dup
            astore 1
            monitorenter
         1: .line 82
            aload 0 /* this */
            getfield com.sun.jmx.remote.internal.ClientCommunicatorAdmin.state:I
            iconst_3
            if_icmpne 4
         2: .line 83
            aload 1
            monitorexit
         3: return
         4: .line 86
      StackMap locals: int[]
      StackMap stack:
            aload 0 /* this */
            iconst_3
            putfield com.sun.jmx.remote.internal.ClientCommunicatorAdmin.state:I
         5: .line 88
            aload 0 /* this */
            getfield com.sun.jmx.remote.internal.ClientCommunicatorAdmin.lock:[I
            invokevirtual java.lang.Object.notifyAll:()V
         6: .line 90
            aload 0 /* this */
            getfield com.sun.jmx.remote.internal.ClientCommunicatorAdmin.checker:Lcom/sun/jmx/remote/internal/ClientCommunicatorAdmin$Checker;
            ifnull 8
         7: .line 91
            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 81
      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 93
      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 97
            aload 0 /* this */
            getfield com.sun.jmx.remote.internal.ClientCommunicatorAdmin.lock:[I
            dup
            astore 2
            monitorenter
         1: .line 98
            aload 0 /* this */
            getfield com.sun.jmx.remote.internal.ClientCommunicatorAdmin.state:I
            iconst_3
            if_icmpne 3
         2: .line 99
            new java.io.IOException
            dup
            ldc "The client has been closed."
            invokespecial java.io.IOException.<init>:(Ljava/lang/String;)V
            athrow
         3: .line 100
      StackMap locals: int[]
      StackMap stack:
            aload 0 /* this */
            getfield com.sun.jmx.remote.internal.ClientCommunicatorAdmin.state:I
            iconst_2
            if_icmpne 5
         4: .line 101
            aload 1 /* ioe */
            athrow
         5: .line 102
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield com.sun.jmx.remote.internal.ClientCommunicatorAdmin.state:I
            iconst_1
            if_icmpne 20
         6: .line 105
            goto 13
         7: .line 107
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield com.sun.jmx.remote.internal.ClientCommunicatorAdmin.lock:[I
            invokevirtual java.lang.Object.wait:()V
         8: .line 108
            goto 13
      StackMap locals:
      StackMap stack: java.lang.InterruptedException
         9: astore 3 /* ire */
        start local 3 // java.lang.InterruptedException ire
        10: .line 110
            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 111
            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 113
            aload 4 /* iioe */
            athrow
        end local 4 // java.io.InterruptedIOException iioe
        end local 3 // java.lang.InterruptedException ire
        13: .line 105
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield com.sun.jmx.remote.internal.ClientCommunicatorAdmin.state:I
            iconst_1
            if_icmpeq 7
        14: .line 117
            aload 0 /* this */
            getfield com.sun.jmx.remote.internal.ClientCommunicatorAdmin.state:I
            iconst_3
            if_icmpne 16
        15: .line 118
            new java.io.IOException
            dup
            ldc "The client has been closed."
            invokespecial java.io.IOException.<init>:(Ljava/lang/String;)V
            athrow
        16: .line 119
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield com.sun.jmx.remote.internal.ClientCommunicatorAdmin.state:I
            ifeq 18
        17: .line 121
            aload 1 /* ioe */
            athrow
        18: .line 123
      StackMap locals:
      StackMap stack:
            aload 2
            monitorexit
        19: return
        20: .line 125
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            iconst_1
            putfield com.sun.jmx.remote.internal.ClientCommunicatorAdmin.state:I
        21: .line 126
            aload 0 /* this */
            getfield com.sun.jmx.remote.internal.ClientCommunicatorAdmin.lock:[I
            invokevirtual java.lang.Object.notifyAll:()V
        22: .line 97
            aload 2
            monitorexit
        23: goto 26
      StackMap locals:
      StackMap stack: java.lang.Throwable
        24: aload 2
            monitorexit
        25: athrow
        26: .line 132
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            invokevirtual com.sun.jmx.remote.internal.ClientCommunicatorAdmin.doStart:()V
        27: .line 133
            aload 0 /* this */
            getfield com.sun.jmx.remote.internal.ClientCommunicatorAdmin.lock:[I
            dup
            astore 2
            monitorenter
        28: .line 134
            aload 0 /* this */
            getfield com.sun.jmx.remote.internal.ClientCommunicatorAdmin.state:I
            iconst_3
            if_icmpne 30
        29: .line 135
            new java.io.IOException
            dup
            ldc "The client has been closed."
            invokespecial java.io.IOException.<init>:(Ljava/lang/String;)V
            athrow
        30: .line 138
      StackMap locals: int[]
      StackMap stack:
            aload 0 /* this */
            iconst_0
            putfield com.sun.jmx.remote.internal.ClientCommunicatorAdmin.state:I
        31: .line 140
            aload 0 /* this */
            getfield com.sun.jmx.remote.internal.ClientCommunicatorAdmin.lock:[I
            invokevirtual java.lang.Object.notifyAll:()V
        32: .line 133
            aload 2
            monitorexit
        33: goto 36
      StackMap locals:
      StackMap stack: java.lang.Throwable
        34: aload 2
            monitorexit
        35: athrow
        36: .line 143
      StackMap locals:
      StackMap stack:
            return
        37: .line 144
      StackMap locals:
      StackMap stack: java.lang.Exception
            astore 2 /* e */
        start local 2 // java.lang.Exception e
        38: .line 145
            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 146
            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 148
            aload 0 /* this */
            getfield com.sun.jmx.remote.internal.ClientCommunicatorAdmin.lock:[I
            dup
            astore 3
            monitorenter
        41: .line 149
            aload 0 /* this */
            getfield com.sun.jmx.remote.internal.ClientCommunicatorAdmin.state:I
            iconst_3
            if_icmpne 43
        42: .line 150
            new java.io.IOException
            dup
            ldc "The client has been closed."
            invokespecial java.io.IOException.<init>:(Ljava/lang/String;)V
            athrow
        43: .line 153
      StackMap locals: java.lang.Exception int[]
      StackMap stack:
            aload 0 /* this */
            iconst_2
            putfield com.sun.jmx.remote.internal.ClientCommunicatorAdmin.state:I
        44: .line 155
            aload 0 /* this */
            getfield com.sun.jmx.remote.internal.ClientCommunicatorAdmin.lock:[I
            invokevirtual java.lang.Object.notifyAll:()V
        45: .line 148
            aload 3
            monitorexit
        46: goto 49
      StackMap locals:
      StackMap stack: java.lang.Throwable
        47: aload 3
            monitorexit
        48: athrow
        49: .line 159
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            invokevirtual com.sun.jmx.remote.internal.ClientCommunicatorAdmin.doStop:()V
        50: .line 160
            goto 52
      StackMap locals:
      StackMap stack: java.lang.Exception
        51: pop
        52: .line 165
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            invokevirtual com.sun.jmx.remote.internal.ClientCommunicatorAdmin.terminate:()V
        53: .line 167
            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