final class com.google.common.util.concurrent.SequentialExecutor implements java.util.concurrent.Executor
  minor version: 0
  major version: 59
  flags: flags: (0x0030) ACC_FINAL, ACC_SUPER
  this_class: com.google.common.util.concurrent.SequentialExecutor
  super_class: java.lang.Object
{
  private static final java.util.logging.Logger log;
    descriptor: Ljava/util/logging/Logger;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL

  private final java.util.concurrent.Executor executor;
    descriptor: Ljava/util/concurrent/Executor;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private final java.util.Deque<java.lang.Runnable> queue;
    descriptor: Ljava/util/Deque;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL
    Signature: Ljava/util/Deque<Ljava/lang/Runnable;>;
    RuntimeInvisibleAnnotations: 
      com.google.errorprone.annotations.concurrent.GuardedBy(value = "queue")

  private com.google.common.util.concurrent.SequentialExecutor$WorkerRunningState workerRunningState;
    descriptor: Lcom/google/common/util/concurrent/SequentialExecutor$WorkerRunningState;
    flags: (0x0002) ACC_PRIVATE
    RuntimeInvisibleAnnotations: 
      com.google.errorprone.annotations.concurrent.GuardedBy(value = "queue")

  private long workerRunCount;
    descriptor: J
    flags: (0x0002) ACC_PRIVATE
    RuntimeInvisibleAnnotations: 
      com.google.errorprone.annotations.concurrent.GuardedBy(value = "queue")

  private final com.google.common.util.concurrent.SequentialExecutor$QueueWorker worker;
    descriptor: Lcom/google/common/util/concurrent/SequentialExecutor$QueueWorker;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  static void <clinit>();
    descriptor: ()V
    flags: (0x0008) ACC_STATIC
    Code:
      stack=1, locals=0, args_size=0
         0: .line 50
            ldc Lcom/google/common/util/concurrent/SequentialExecutor;
            invokevirtual java.lang.Class.getName:()Ljava/lang/String;
            invokestatic java.util.logging.Logger.getLogger:(Ljava/lang/String;)Ljava/util/logging/Logger;
            putstatic com.google.common.util.concurrent.SequentialExecutor.log:Ljava/util/logging/Logger;
            return
      LocalVariableTable:
        Start  End  Slot  Name  Signature

  void <init>(java.util.concurrent.Executor);
    descriptor: (Ljava/util/concurrent/Executor;)V
    flags: (0x0000) 
    Code:
      stack=4, locals=2, args_size=2
        start local 0 // com.google.common.util.concurrent.SequentialExecutor this
        start local 1 // java.util.concurrent.Executor executor
         0: .line 85
            aload 0 /* this */
            invokespecial java.lang.Object.<init>:()V
         1: .line 66
            aload 0 /* this */
            new java.util.ArrayDeque
            dup
            invokespecial java.util.ArrayDeque.<init>:()V
            putfield com.google.common.util.concurrent.SequentialExecutor.queue:Ljava/util/Deque;
         2: .line 70
            aload 0 /* this */
            getstatic com.google.common.util.concurrent.SequentialExecutor$WorkerRunningState.IDLE:Lcom/google/common/util/concurrent/SequentialExecutor$WorkerRunningState;
            putfield com.google.common.util.concurrent.SequentialExecutor.workerRunningState:Lcom/google/common/util/concurrent/SequentialExecutor$WorkerRunningState;
         3: .line 80
            aload 0 /* this */
            lconst_0
            putfield com.google.common.util.concurrent.SequentialExecutor.workerRunCount:J
         4: .line 82
            aload 0 /* this */
            new com.google.common.util.concurrent.SequentialExecutor$QueueWorker
            dup
            aload 0 /* this */
            invokespecial com.google.common.util.concurrent.SequentialExecutor$QueueWorker.<init>:(Lcom/google/common/util/concurrent/SequentialExecutor;)V
            putfield com.google.common.util.concurrent.SequentialExecutor.worker:Lcom/google/common/util/concurrent/SequentialExecutor$QueueWorker;
         5: .line 86
            aload 0 /* this */
            aload 1 /* executor */
            invokestatic com.google.common.base.Preconditions.checkNotNull:(Ljava/lang/Object;)Ljava/lang/Object;
            checkcast java.util.concurrent.Executor
            putfield com.google.common.util.concurrent.SequentialExecutor.executor:Ljava/util/concurrent/Executor;
         6: .line 87
            return
        end local 1 // java.util.concurrent.Executor executor
        end local 0 // com.google.common.util.concurrent.SequentialExecutor this
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0    7     0      this  Lcom/google/common/util/concurrent/SequentialExecutor;
            0    7     1  executor  Ljava/util/concurrent/Executor;
    MethodParameters:
          Name  Flags
      executor  

  public void execute(java.lang.Runnable);
    descriptor: (Ljava/lang/Runnable;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=8, args_size=2
        start local 0 // com.google.common.util.concurrent.SequentialExecutor this
        start local 1 // java.lang.Runnable task
         0: .line 97
            aload 1 /* task */
            invokestatic com.google.common.base.Preconditions.checkNotNull:(Ljava/lang/Object;)Ljava/lang/Object;
            pop
         1: .line 100
            aload 0 /* this */
            getfield com.google.common.util.concurrent.SequentialExecutor.queue:Ljava/util/Deque;
            dup
            astore 5
            monitorenter
         2: .line 103
            aload 0 /* this */
            getfield com.google.common.util.concurrent.SequentialExecutor.workerRunningState:Lcom/google/common/util/concurrent/SequentialExecutor$WorkerRunningState;
            getstatic com.google.common.util.concurrent.SequentialExecutor$WorkerRunningState.RUNNING:Lcom/google/common/util/concurrent/SequentialExecutor$WorkerRunningState;
            if_acmpeq 3
            aload 0 /* this */
            getfield com.google.common.util.concurrent.SequentialExecutor.workerRunningState:Lcom/google/common/util/concurrent/SequentialExecutor$WorkerRunningState;
            getstatic com.google.common.util.concurrent.SequentialExecutor$WorkerRunningState.QUEUED:Lcom/google/common/util/concurrent/SequentialExecutor$WorkerRunningState;
            if_acmpne 6
         3: .line 104
      StackMap locals: com.google.common.util.concurrent.SequentialExecutor java.lang.Runnable top top top java.util.Deque
      StackMap stack:
            aload 0 /* this */
            getfield com.google.common.util.concurrent.SequentialExecutor.queue:Ljava/util/Deque;
            aload 1 /* task */
            invokeinterface java.util.Deque.add:(Ljava/lang/Object;)Z
            pop
         4: .line 105
            aload 5
            monitorexit
         5: return
         6: .line 108
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield com.google.common.util.concurrent.SequentialExecutor.workerRunCount:J
            lstore 3 /* oldRunCount */
        start local 3 // long oldRunCount
         7: .line 117
            new com.google.common.util.concurrent.SequentialExecutor$1
            dup
            aload 0 /* this */
            aload 1 /* task */
            invokespecial com.google.common.util.concurrent.SequentialExecutor$1.<init>:(Lcom/google/common/util/concurrent/SequentialExecutor;Ljava/lang/Runnable;)V
         8: .line 116
            astore 2 /* submittedTask */
        start local 2 // java.lang.Runnable submittedTask
         9: .line 123
            aload 0 /* this */
            getfield com.google.common.util.concurrent.SequentialExecutor.queue:Ljava/util/Deque;
            aload 2 /* submittedTask */
            invokeinterface java.util.Deque.add:(Ljava/lang/Object;)Z
            pop
        10: .line 124
            aload 0 /* this */
            getstatic com.google.common.util.concurrent.SequentialExecutor$WorkerRunningState.QUEUING:Lcom/google/common/util/concurrent/SequentialExecutor$WorkerRunningState;
            putfield com.google.common.util.concurrent.SequentialExecutor.workerRunningState:Lcom/google/common/util/concurrent/SequentialExecutor$WorkerRunningState;
        11: .line 100
            aload 5
            monitorexit
        12: goto 15
        end local 3 // long oldRunCount
        end local 2 // java.lang.Runnable submittedTask
      StackMap locals:
      StackMap stack: java.lang.Throwable
        13: aload 5
            monitorexit
        14: athrow
        start local 2 // java.lang.Runnable submittedTask
        start local 3 // long oldRunCount
        15: .line 128
      StackMap locals: com.google.common.util.concurrent.SequentialExecutor java.lang.Runnable java.lang.Runnable long
      StackMap stack:
            aload 0 /* this */
            getfield com.google.common.util.concurrent.SequentialExecutor.executor:Ljava/util/concurrent/Executor;
            aload 0 /* this */
            getfield com.google.common.util.concurrent.SequentialExecutor.worker:Lcom/google/common/util/concurrent/SequentialExecutor$QueueWorker;
            invokeinterface java.util.concurrent.Executor.execute:(Ljava/lang/Runnable;)V
        16: .line 129
            goto 31
      StackMap locals:
      StackMap stack: java.lang.Throwable
        17: astore 5 /* t */
        start local 5 // java.lang.Throwable t
        18: .line 130
            aload 0 /* this */
            getfield com.google.common.util.concurrent.SequentialExecutor.queue:Ljava/util/Deque;
            dup
            astore 6
            monitorenter
        19: .line 132
            aload 0 /* this */
            getfield com.google.common.util.concurrent.SequentialExecutor.workerRunningState:Lcom/google/common/util/concurrent/SequentialExecutor$WorkerRunningState;
            getstatic com.google.common.util.concurrent.SequentialExecutor$WorkerRunningState.IDLE:Lcom/google/common/util/concurrent/SequentialExecutor$WorkerRunningState;
            if_acmpeq 20
            aload 0 /* this */
            getfield com.google.common.util.concurrent.SequentialExecutor.workerRunningState:Lcom/google/common/util/concurrent/SequentialExecutor$WorkerRunningState;
            getstatic com.google.common.util.concurrent.SequentialExecutor$WorkerRunningState.QUEUING:Lcom/google/common/util/concurrent/SequentialExecutor$WorkerRunningState;
            if_acmpne 22
        20: .line 133
      StackMap locals: java.lang.Throwable java.util.Deque
      StackMap stack:
            aload 0 /* this */
            getfield com.google.common.util.concurrent.SequentialExecutor.queue:Ljava/util/Deque;
            aload 2 /* submittedTask */
            invokeinterface java.util.Deque.removeLastOccurrence:(Ljava/lang/Object;)Z
            ifeq 22
        21: .line 131
            iconst_1
            goto 23
      StackMap locals:
      StackMap stack:
        22: iconst_0
      StackMap locals:
      StackMap stack: int
        23: istore 7 /* removed */
        start local 7 // boolean removed
        24: .line 136
            aload 5 /* t */
            instanceof java.util.concurrent.RejectedExecutionException
            ifeq 25
            iload 7 /* removed */
            ifeq 26
        25: .line 137
      StackMap locals: int
      StackMap stack:
            aload 5 /* t */
            athrow
        end local 7 // boolean removed
        26: .line 130
      StackMap locals:
      StackMap stack:
            aload 6
            monitorexit
        27: goto 30
      StackMap locals:
      StackMap stack: java.lang.Throwable
        28: aload 6
            monitorexit
        29: athrow
        30: .line 140
      StackMap locals:
      StackMap stack:
            return
        end local 5 // java.lang.Throwable t
        31: .line 154
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield com.google.common.util.concurrent.SequentialExecutor.workerRunningState:Lcom/google/common/util/concurrent/SequentialExecutor$WorkerRunningState;
            getstatic com.google.common.util.concurrent.SequentialExecutor$WorkerRunningState.QUEUING:Lcom/google/common/util/concurrent/SequentialExecutor$WorkerRunningState;
            if_acmpeq 32
            iconst_1
            goto 33
      StackMap locals:
      StackMap stack:
        32: iconst_0
      StackMap locals:
      StackMap stack: int
        33: istore 5 /* alreadyMarkedQueued */
        start local 5 // boolean alreadyMarkedQueued
        34: .line 155
            iload 5 /* alreadyMarkedQueued */
            ifeq 36
        35: .line 156
            return
        36: .line 158
      StackMap locals: int
      StackMap stack:
            aload 0 /* this */
            getfield com.google.common.util.concurrent.SequentialExecutor.queue:Ljava/util/Deque;
            dup
            astore 6
            monitorenter
        37: .line 159
            aload 0 /* this */
            getfield com.google.common.util.concurrent.SequentialExecutor.workerRunCount:J
            lload 3 /* oldRunCount */
            lcmp
            ifne 39
            aload 0 /* this */
            getfield com.google.common.util.concurrent.SequentialExecutor.workerRunningState:Lcom/google/common/util/concurrent/SequentialExecutor$WorkerRunningState;
            getstatic com.google.common.util.concurrent.SequentialExecutor$WorkerRunningState.QUEUING:Lcom/google/common/util/concurrent/SequentialExecutor$WorkerRunningState;
            if_acmpne 39
        38: .line 160
            aload 0 /* this */
            getstatic com.google.common.util.concurrent.SequentialExecutor$WorkerRunningState.QUEUED:Lcom/google/common/util/concurrent/SequentialExecutor$WorkerRunningState;
            putfield com.google.common.util.concurrent.SequentialExecutor.workerRunningState:Lcom/google/common/util/concurrent/SequentialExecutor$WorkerRunningState;
        39: .line 158
      StackMap locals: java.util.Deque
      StackMap stack:
            aload 6
            monitorexit
        40: goto 43
      StackMap locals:
      StackMap stack: java.lang.Throwable
        41: aload 6
            monitorexit
        42: athrow
        43: .line 163
      StackMap locals:
      StackMap stack:
            return
        end local 5 // boolean alreadyMarkedQueued
        end local 3 // long oldRunCount
        end local 2 // java.lang.Runnable submittedTask
        end local 1 // java.lang.Runnable task
        end local 0 // com.google.common.util.concurrent.SequentialExecutor this
      LocalVariableTable:
        Start  End  Slot                 Name  Signature
            0   44     0                 this  Lcom/google/common/util/concurrent/SequentialExecutor;
            0   44     1                 task  Ljava/lang/Runnable;
            9   13     2        submittedTask  Ljava/lang/Runnable;
           15   44     2        submittedTask  Ljava/lang/Runnable;
            7   13     3          oldRunCount  J
           15   44     3          oldRunCount  J
           18   31     5                    t  Ljava/lang/Throwable;
           24   26     7              removed  Z
           34   44     5  alreadyMarkedQueued  Z
      Exception table:
        from    to  target  type
           2     5      13  any
           6    12      13  any
          13    14      13  any
          15    16      17  Class java.lang.RuntimeException
          15    16      17  Class java.lang.Error
          19    27      28  any
          28    29      28  any
          37    40      41  any
          41    42      41  any
    MethodParameters:
      Name  Flags
      task  final
}
SourceFile: "SequentialExecutor.java"
NestMembers:
  com.google.common.util.concurrent.SequentialExecutor$1  com.google.common.util.concurrent.SequentialExecutor$QueueWorker  com.google.common.util.concurrent.SequentialExecutor$WorkerRunningState
InnerClasses:
  com.google.common.util.concurrent.SequentialExecutor$1
  private final QueueWorker = com.google.common.util.concurrent.SequentialExecutor$QueueWorker of com.google.common.util.concurrent.SequentialExecutor
  final WorkerRunningState = com.google.common.util.concurrent.SequentialExecutor$WorkerRunningState of com.google.common.util.concurrent.SequentialExecutor
    RuntimeInvisibleAnnotations: 
      com.google.common.annotations.GwtIncompatible()