.class public Le/j/d/b/b; .super Ljava/util/concurrent/AbstractExecutorService; .source "ConstrainedExecutorService.java" # annotations .annotation system Ldalvik/annotation/MemberClasses; value = { Le/j/d/b/b$b; } .end annotation # static fields .field public static final k:Ljava/lang/Class; .annotation system Ldalvik/annotation/Signature; value = { "Ljava/lang/Class<", "*>;" } .end annotation .end field # instance fields .field public final d:Ljava/lang/String; .field public final e:Ljava/util/concurrent/Executor; .field public volatile f:I .field public final g:Ljava/util/concurrent/BlockingQueue; .annotation system Ldalvik/annotation/Signature; value = { "Ljava/util/concurrent/BlockingQueue<", "Ljava/lang/Runnable;", ">;" } .end annotation .end field .field public final h:Le/j/d/b/b$b; .field public final i:Ljava/util/concurrent/atomic/AtomicInteger; .field public final j:Ljava/util/concurrent/atomic/AtomicInteger; # direct methods .method public static constructor ()V .locals 1 const-class v0, Le/j/d/b/b; sput-object v0, Le/j/d/b/b;->k:Ljava/lang/Class; return-void .end method .method public constructor (Ljava/lang/String;ILjava/util/concurrent/Executor;Ljava/util/concurrent/BlockingQueue;)V .locals 0 .annotation system Ldalvik/annotation/Signature; value = { "(", "Ljava/lang/String;", "I", "Ljava/util/concurrent/Executor;", "Ljava/util/concurrent/BlockingQueue<", "Ljava/lang/Runnable;", ">;)V" } .end annotation invoke-direct {p0}, Ljava/util/concurrent/AbstractExecutorService;->()V if-lez p2, :cond_0 iput-object p1, p0, Le/j/d/b/b;->d:Ljava/lang/String; iput-object p3, p0, Le/j/d/b/b;->e:Ljava/util/concurrent/Executor; iput p2, p0, Le/j/d/b/b;->f:I iput-object p4, p0, Le/j/d/b/b;->g:Ljava/util/concurrent/BlockingQueue; new-instance p1, Le/j/d/b/b$b; const/4 p2, 0x0 invoke-direct {p1, p0, p2}, Le/j/d/b/b$b;->(Le/j/d/b/b;Le/j/d/b/b$a;)V iput-object p1, p0, Le/j/d/b/b;->h:Le/j/d/b/b$b; new-instance p1, Ljava/util/concurrent/atomic/AtomicInteger; const/4 p2, 0x0 invoke-direct {p1, p2}, Ljava/util/concurrent/atomic/AtomicInteger;->(I)V iput-object p1, p0, Le/j/d/b/b;->i:Ljava/util/concurrent/atomic/AtomicInteger; new-instance p1, Ljava/util/concurrent/atomic/AtomicInteger; invoke-direct {p1, p2}, Ljava/util/concurrent/atomic/AtomicInteger;->(I)V iput-object p1, p0, Le/j/d/b/b;->j:Ljava/util/concurrent/atomic/AtomicInteger; return-void :cond_0 new-instance p1, Ljava/lang/IllegalArgumentException; const-string p2, "max concurrency must be > 0" invoke-direct {p1, p2}, Ljava/lang/IllegalArgumentException;->(Ljava/lang/String;)V throw p1 .end method # virtual methods .method public final a()V .locals 5 iget-object v0, p0, Le/j/d/b/b;->i:Ljava/util/concurrent/atomic/AtomicInteger; invoke-virtual {v0}, Ljava/util/concurrent/atomic/AtomicInteger;->get()I move-result v0 :goto_0 iget v1, p0, Le/j/d/b/b;->f:I if-ge v0, v1, :cond_1 add-int/lit8 v1, v0, 0x1 iget-object v2, p0, Le/j/d/b/b;->i:Ljava/util/concurrent/atomic/AtomicInteger; invoke-virtual {v2, v0, v1}, Ljava/util/concurrent/atomic/AtomicInteger;->compareAndSet(II)Z move-result v0 if-eqz v0, :cond_0 sget-object v0, Le/j/d/b/b;->k:Ljava/lang/Class; iget-object v2, p0, Le/j/d/b/b;->d:Ljava/lang/String; invoke-static {v1}, Ljava/lang/Integer;->valueOf(I)Ljava/lang/Integer; move-result-object v1 iget v3, p0, Le/j/d/b/b;->f:I invoke-static {v3}, Ljava/lang/Integer;->valueOf(I)Ljava/lang/Integer; move-result-object v3 const-string v4, "%s: starting worker %d of %d" invoke-static {v0, v4, v2, v1, v3}, Le/j/d/f/a;->a(Ljava/lang/Class;Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V iget-object v0, p0, Le/j/d/b/b;->e:Ljava/util/concurrent/Executor; iget-object v1, p0, Le/j/d/b/b;->h:Le/j/d/b/b$b; invoke-interface {v0, v1}, Ljava/util/concurrent/Executor;->execute(Ljava/lang/Runnable;)V goto :goto_1 :cond_0 sget-object v0, Le/j/d/b/b;->k:Ljava/lang/Class; iget-object v1, p0, Le/j/d/b/b;->d:Ljava/lang/String; const-string v2, "%s: race in startWorkerIfNeeded; retrying" invoke-static {v0, v2, v1}, Le/j/d/f/a;->a(Ljava/lang/Class;Ljava/lang/String;Ljava/lang/Object;)V iget-object v0, p0, Le/j/d/b/b;->i:Ljava/util/concurrent/atomic/AtomicInteger; invoke-virtual {v0}, Ljava/util/concurrent/atomic/AtomicInteger;->get()I move-result v0 goto :goto_0 :cond_1 :goto_1 return-void .end method .method public awaitTermination(JLjava/util/concurrent/TimeUnit;)Z .locals 0 .annotation system Ldalvik/annotation/Throws; value = { Ljava/lang/InterruptedException; } .end annotation new-instance p1, Ljava/lang/UnsupportedOperationException; invoke-direct {p1}, Ljava/lang/UnsupportedOperationException;->()V throw p1 .end method .method public execute(Ljava/lang/Runnable;)V .locals 3 if-eqz p1, :cond_2 iget-object v0, p0, Le/j/d/b/b;->g:Ljava/util/concurrent/BlockingQueue; invoke-interface {v0, p1}, Ljava/util/concurrent/BlockingQueue;->offer(Ljava/lang/Object;)Z move-result p1 if-eqz p1, :cond_1 iget-object p1, p0, Le/j/d/b/b;->g:Ljava/util/concurrent/BlockingQueue; invoke-interface {p1}, Ljava/util/concurrent/BlockingQueue;->size()I move-result p1 iget-object v0, p0, Le/j/d/b/b;->j:Ljava/util/concurrent/atomic/AtomicInteger; invoke-virtual {v0}, Ljava/util/concurrent/atomic/AtomicInteger;->get()I move-result v0 if-le p1, v0, :cond_0 iget-object v1, p0, Le/j/d/b/b;->j:Ljava/util/concurrent/atomic/AtomicInteger; invoke-virtual {v1, v0, p1}, Ljava/util/concurrent/atomic/AtomicInteger;->compareAndSet(II)Z move-result v0 if-eqz v0, :cond_0 sget-object v0, Le/j/d/b/b;->k:Ljava/lang/Class; iget-object v1, p0, Le/j/d/b/b;->d:Ljava/lang/String; invoke-static {p1}, Ljava/lang/Integer;->valueOf(I)Ljava/lang/Integer; move-result-object p1 const-string v2, "%s: max pending work in queue = %d" invoke-static {v0, v2, v1, p1}, Le/j/d/f/a;->a(Ljava/lang/Class;Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)V :cond_0 invoke-virtual {p0}, Le/j/d/b/b;->a()V return-void :cond_1 new-instance p1, Ljava/util/concurrent/RejectedExecutionException; new-instance v0, Ljava/lang/StringBuilder; invoke-direct {v0}, Ljava/lang/StringBuilder;->()V iget-object v1, p0, Le/j/d/b/b;->d:Ljava/lang/String; invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; const-string v1, " queue is full, size=" invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; iget-object v1, p0, Le/j/d/b/b;->g:Ljava/util/concurrent/BlockingQueue; invoke-interface {v1}, Ljava/util/concurrent/BlockingQueue;->size()I move-result v1 invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder; invoke-virtual {v0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String; move-result-object v0 invoke-direct {p1, v0}, Ljava/util/concurrent/RejectedExecutionException;->(Ljava/lang/String;)V throw p1 :cond_2 new-instance p1, Ljava/lang/NullPointerException; const-string v0, "runnable parameter is null" invoke-direct {p1, v0}, Ljava/lang/NullPointerException;->(Ljava/lang/String;)V throw p1 .end method .method public isShutdown()Z .locals 1 const/4 v0, 0x0 return v0 .end method .method public isTerminated()Z .locals 1 const/4 v0, 0x0 return v0 .end method .method public shutdown()V .locals 1 new-instance v0, Ljava/lang/UnsupportedOperationException; invoke-direct {v0}, Ljava/lang/UnsupportedOperationException;->()V throw v0 .end method .method public shutdownNow()Ljava/util/List; .locals 1 .annotation system Ldalvik/annotation/Signature; value = { "()", "Ljava/util/List<", "Ljava/lang/Runnable;", ">;" } .end annotation new-instance v0, Ljava/lang/UnsupportedOperationException; invoke-direct {v0}, Ljava/lang/UnsupportedOperationException;->()V throw v0 .end method