public class org.apache.commons.lang.concurrent.TimedSemaphore extends java.lang.Object
{
public static final int NO_LIMIT;
private static final int THREAD_POOL_SIZE;
private final java.util.concurrent.ScheduledExecutorService executorService;
private final long period;
private final java.util.concurrent.TimeUnit unit;
private final boolean ownExecutor;
private java.util.concurrent.ScheduledFuture task;
private long totalAcquireCount;
private long periodCount;
private int limit;
private int acquireCount;
private int lastCallsPerPeriod;
private boolean shutdown;
public void <init>(long, java.util.concurrent.TimeUnit, int)
{
java.util.concurrent.TimeUnit v;
org.apache.commons.lang.concurrent.TimedSemaphore v;
int v;
long v;
v := @this: org.apache.commons.lang.concurrent.TimedSemaphore;
v := @parameter: long;
v := @parameter: java.util.concurrent.TimeUnit;
v := @parameter: int;
specialinvoke v.<org.apache.commons.lang.concurrent.TimedSemaphore: void <init>(java.util.concurrent.ScheduledExecutorService,long,java.util.concurrent.TimeUnit,int)>(null, v, v, v);
return;
}
public void <init>(java.util.concurrent.ScheduledExecutorService, long, java.util.concurrent.TimeUnit, int)
{
java.util.concurrent.TimeUnit v;
org.apache.commons.lang.concurrent.TimedSemaphore v;
int v;
java.util.concurrent.ScheduledExecutorService v;
java.util.concurrent.ScheduledThreadPoolExecutor v;
long v;
v := @this: org.apache.commons.lang.concurrent.TimedSemaphore;
v := @parameter: java.util.concurrent.ScheduledExecutorService;
v := @parameter: long;
v := @parameter: java.util.concurrent.TimeUnit;
v := @parameter: int;
specialinvoke v.<java.lang.Object: void <init>()>();
staticinvoke <org.apache.commons.lang.Validate: void inclusiveBetween(long,long,long,java.lang.String)>(1L, 9223372036854775807L, v, "Time period must be greater than 0!");
v.<org.apache.commons.lang.concurrent.TimedSemaphore: long period> = v;
v.<org.apache.commons.lang.concurrent.TimedSemaphore: java.util.concurrent.TimeUnit unit> = v;
if v == null goto label;
v.<org.apache.commons.lang.concurrent.TimedSemaphore: java.util.concurrent.ScheduledExecutorService executorService> = v;
v.<org.apache.commons.lang.concurrent.TimedSemaphore: boolean ownExecutor> = 0;
goto label;
label:
v = new java.util.concurrent.ScheduledThreadPoolExecutor;
specialinvoke v.<java.util.concurrent.ScheduledThreadPoolExecutor: void <init>(int)>(1);
virtualinvoke v.<java.util.concurrent.ScheduledThreadPoolExecutor: void setContinueExistingPeriodicTasksAfterShutdownPolicy(boolean)>(0);
virtualinvoke v.<java.util.concurrent.ScheduledThreadPoolExecutor: void setExecuteExistingDelayedTasksAfterShutdownPolicy(boolean)>(0);
v.<org.apache.commons.lang.concurrent.TimedSemaphore: java.util.concurrent.ScheduledExecutorService executorService> = v;
v.<org.apache.commons.lang.concurrent.TimedSemaphore: boolean ownExecutor> = 1;
label:
virtualinvoke v.<org.apache.commons.lang.concurrent.TimedSemaphore: void setLimit(int)>(v);
return;
}
public synchronized void acquire() throws java.lang.InterruptedException
{
org.apache.commons.lang.concurrent.TimedSemaphore v;
boolean v;
v := @this: org.apache.commons.lang.concurrent.TimedSemaphore;
specialinvoke v.<org.apache.commons.lang.concurrent.TimedSemaphore: void prepareAcquire()>();
label:
v = specialinvoke v.<org.apache.commons.lang.concurrent.TimedSemaphore: boolean acquirePermit()>();
if v != 0 goto label;
virtualinvoke v.<java.lang.Object: void wait()>();
label:
if v == 0 goto label;
return;
}
private boolean acquirePermit()
{
org.apache.commons.lang.concurrent.TimedSemaphore v;
int v, v, v, v, v;
v := @this: org.apache.commons.lang.concurrent.TimedSemaphore;
v = virtualinvoke v.<org.apache.commons.lang.concurrent.TimedSemaphore: int getLimit()>();
if v <= 0 goto label;
v = v.<org.apache.commons.lang.concurrent.TimedSemaphore: int acquireCount>;
v = virtualinvoke v.<org.apache.commons.lang.concurrent.TimedSemaphore: int getLimit()>();
if v >= v goto label;
label:
v = v.<org.apache.commons.lang.concurrent.TimedSemaphore: int acquireCount>;
v = v + 1;
v.<org.apache.commons.lang.concurrent.TimedSemaphore: int acquireCount> = v;
return 1;
label:
return 0;
}
synchronized void endOfPeriod()
{
org.apache.commons.lang.concurrent.TimedSemaphore v;
int v, v;
long v, v, v, v;
v := @this: org.apache.commons.lang.concurrent.TimedSemaphore;
v = v.<org.apache.commons.lang.concurrent.TimedSemaphore: int acquireCount>;
v.<org.apache.commons.lang.concurrent.TimedSemaphore: int lastCallsPerPeriod> = v;
v = v.<org.apache.commons.lang.concurrent.TimedSemaphore: long totalAcquireCount>;
v = v.<org.apache.commons.lang.concurrent.TimedSemaphore: int acquireCount>;
v = v + v;
v.<org.apache.commons.lang.concurrent.TimedSemaphore: long totalAcquireCount> = v;
v = v.<org.apache.commons.lang.concurrent.TimedSemaphore: long periodCount>;
v = v + 1L;
v.<org.apache.commons.lang.concurrent.TimedSemaphore: long periodCount> = v;
v.<org.apache.commons.lang.concurrent.TimedSemaphore: int acquireCount> = 0;
virtualinvoke v.<java.lang.Object: void notifyAll()>();
return;
}
public synchronized int getAcquireCount()
{
int v;
org.apache.commons.lang.concurrent.TimedSemaphore v;
v := @this: org.apache.commons.lang.concurrent.TimedSemaphore;
v = v.<org.apache.commons.lang.concurrent.TimedSemaphore: int acquireCount>;
return v;
}
public synchronized int getAvailablePermits()
{
org.apache.commons.lang.concurrent.TimedSemaphore v;
int v, v, v;
v := @this: org.apache.commons.lang.concurrent.TimedSemaphore;
v = virtualinvoke v.<org.apache.commons.lang.concurrent.TimedSemaphore: int getLimit()>();
v = virtualinvoke v.<org.apache.commons.lang.concurrent.TimedSemaphore: int getAcquireCount()>();
v = v - v;
return v;
}
public synchronized double getAverageCallsPerPeriod()
{
byte v;
org.apache.commons.lang.concurrent.TimedSemaphore v;
long v, v, v;
double v;
v := @this: org.apache.commons.lang.concurrent.TimedSemaphore;
v = v.<org.apache.commons.lang.concurrent.TimedSemaphore: long periodCount>;
v = v cmp 0L;
if v != 0 goto label;
v = 0.0;
goto label;
label:
v = v.<org.apache.commons.lang.concurrent.TimedSemaphore: long totalAcquireCount>;
v = v.<org.apache.commons.lang.concurrent.TimedSemaphore: long periodCount>;
v = v / v;
label:
return v;
}
protected java.util.concurrent.ScheduledExecutorService getExecutorService()
{
java.util.concurrent.ScheduledExecutorService v;
org.apache.commons.lang.concurrent.TimedSemaphore v;
v := @this: org.apache.commons.lang.concurrent.TimedSemaphore;
v = v.<org.apache.commons.lang.concurrent.TimedSemaphore: java.util.concurrent.ScheduledExecutorService executorService>;
return v;
}
public synchronized int getLastAcquiresPerPeriod()
{
int v;
org.apache.commons.lang.concurrent.TimedSemaphore v;
v := @this: org.apache.commons.lang.concurrent.TimedSemaphore;
v = v.<org.apache.commons.lang.concurrent.TimedSemaphore: int lastCallsPerPeriod>;
return v;
}
public final synchronized int getLimit()
{
int v;
org.apache.commons.lang.concurrent.TimedSemaphore v;
v := @this: org.apache.commons.lang.concurrent.TimedSemaphore;
v = v.<org.apache.commons.lang.concurrent.TimedSemaphore: int limit>;
return v;
}
public long getPeriod()
{
long v;
org.apache.commons.lang.concurrent.TimedSemaphore v;
v := @this: org.apache.commons.lang.concurrent.TimedSemaphore;
v = v.<org.apache.commons.lang.concurrent.TimedSemaphore: long period>;
return v;
}
public java.util.concurrent.TimeUnit getUnit()
{
java.util.concurrent.TimeUnit v;
org.apache.commons.lang.concurrent.TimedSemaphore v;
v := @this: org.apache.commons.lang.concurrent.TimedSemaphore;
v = v.<org.apache.commons.lang.concurrent.TimedSemaphore: java.util.concurrent.TimeUnit unit>;
return v;
}
public synchronized boolean isShutdown()
{
org.apache.commons.lang.concurrent.TimedSemaphore v;
boolean v;
v := @this: org.apache.commons.lang.concurrent.TimedSemaphore;
v = v.<org.apache.commons.lang.concurrent.TimedSemaphore: boolean shutdown>;
return v;
}
private void prepareAcquire()
{
java.lang.IllegalStateException v;
java.util.concurrent.ScheduledFuture v, v;
org.apache.commons.lang.concurrent.TimedSemaphore v;
boolean v;
v := @this: org.apache.commons.lang.concurrent.TimedSemaphore;
v = virtualinvoke v.<org.apache.commons.lang.concurrent.TimedSemaphore: boolean isShutdown()>();
if v == 0 goto label;
v = new java.lang.IllegalStateException;
specialinvoke v.<java.lang.IllegalStateException: void <init>(java.lang.String)>("TimedSemaphore is shut down!");
throw v;
label:
v = v.<org.apache.commons.lang.concurrent.TimedSemaphore: java.util.concurrent.ScheduledFuture task>;
if v != null goto label;
v = virtualinvoke v.<org.apache.commons.lang.concurrent.TimedSemaphore: java.util.concurrent.ScheduledFuture startTimer()>();
v.<org.apache.commons.lang.concurrent.TimedSemaphore: java.util.concurrent.ScheduledFuture task> = v;
label:
return;
}
public final synchronized void setLimit(int)
{
int v;
org.apache.commons.lang.concurrent.TimedSemaphore v;
v := @this: org.apache.commons.lang.concurrent.TimedSemaphore;
v := @parameter: int;
v.<org.apache.commons.lang.concurrent.TimedSemaphore: int limit> = v;
return;
}
public synchronized void shutdown()
{
java.util.concurrent.ScheduledFuture v, v;
org.apache.commons.lang.concurrent.TimedSemaphore v;
java.util.concurrent.ScheduledExecutorService v;
boolean v, v;
v := @this: org.apache.commons.lang.concurrent.TimedSemaphore;
v = v.<org.apache.commons.lang.concurrent.TimedSemaphore: boolean shutdown>;
if v != 0 goto label;
v = v.<org.apache.commons.lang.concurrent.TimedSemaphore: boolean ownExecutor>;
if v == 0 goto label;
v = virtualinvoke v.<org.apache.commons.lang.concurrent.TimedSemaphore: java.util.concurrent.ScheduledExecutorService getExecutorService()>();
interfaceinvoke v.<java.util.concurrent.ScheduledExecutorService: java.util.List shutdownNow()>();
label:
v = v.<org.apache.commons.lang.concurrent.TimedSemaphore: java.util.concurrent.ScheduledFuture task>;
if v == null goto label;
v = v.<org.apache.commons.lang.concurrent.TimedSemaphore: java.util.concurrent.ScheduledFuture task>;
interfaceinvoke v.<java.util.concurrent.ScheduledFuture: boolean cancel(boolean)>(0);
label:
v.<org.apache.commons.lang.concurrent.TimedSemaphore: boolean shutdown> = 1;
label:
return;
}
protected java.util.concurrent.ScheduledFuture startTimer()
{
java.util.concurrent.TimeUnit v;
java.util.concurrent.ScheduledFuture v;
org.apache.commons.lang.concurrent.TimedSemaphore v;
java.util.concurrent.ScheduledExecutorService v;
long v, v;
java.lang.Runnable v;
v := @this: org.apache.commons.lang.concurrent.TimedSemaphore;
v = virtualinvoke v.<org.apache.commons.lang.concurrent.TimedSemaphore: java.util.concurrent.ScheduledExecutorService getExecutorService()>();
v = staticinvoke <org.apache.commons.lang.concurrent.TimedSemaphore$endOfPeriod__989: java.lang.Runnable bootstrap$(org.apache.commons.lang.concurrent.TimedSemaphore)>(v);
v = virtualinvoke v.<org.apache.commons.lang.concurrent.TimedSemaphore: long getPeriod()>();
v = virtualinvoke v.<org.apache.commons.lang.concurrent.TimedSemaphore: long getPeriod()>();
v = virtualinvoke v.<org.apache.commons.lang.concurrent.TimedSemaphore: java.util.concurrent.TimeUnit getUnit()>();
v = interfaceinvoke v.<java.util.concurrent.ScheduledExecutorService: java.util.concurrent.ScheduledFuture scheduleAtFixedRate(java.lang.Runnable,long,long,java.util.concurrent.TimeUnit)>(v, v, v, v);
return v;
}
public synchronized boolean tryAcquire()
{
org.apache.commons.lang.concurrent.TimedSemaphore v;
boolean v;
v := @this: org.apache.commons.lang.concurrent.TimedSemaphore;
specialinvoke v.<org.apache.commons.lang.concurrent.TimedSemaphore: void prepareAcquire()>();
v = specialinvoke v.<org.apache.commons.lang.concurrent.TimedSemaphore: boolean acquirePermit()>();
return v;
}
}