Class ExecutionQueue
java.lang.Object
com.inductiveautomation.ignition.common.util.ExecutionQueue
Queues up submitted
Runnables and executes them in serial on an
ExecutorService.-
Constructor Summary
ConstructorsConstructorDescriptionExecutionQueue(Executor service) ExecutionQueue(Executor service, Function<Runnable, Runnable> taskWrapper) -
Method Summary
Modifier and TypeMethodDescriptionintgetSize()booleanisIdle()booleanvoidpause()Pause execution of queuedRunnables.voidCall to check if the current code is being executed inside this queue.voidrequireInQueue(String message) Call to check if the current code is being executed inside this queue.voidresume()Resume execution of queuedRunnables.<E extends Throwable>
CompletableFuture<Void>runOrSubmit(FragileRunnable<E> fragileRunnable) Runs the givenFragileRunnableon the calling thread ifisInQueue()is true.<T,E extends Throwable>
CompletableFuture<T>runOrSubmit(FragileSupplier<T, E> fragileSupplier) Runs the givenFragileSupplieron the calling thread ifisInQueue()is true.voidSubmit aRunnableto be executed.voidSubmit one or moreRunnables to be executed.voidsubmitOrRun(Runnable runnable) voidsubmitToHead(Runnable runnable) Submit aRunnableto be executed at the head of the queue.booleantruncate()Call to forcibly remove queued Runnables
-
Constructor Details
-
ExecutionQueue
-
ExecutionQueue
-
-
Method Details
-
submit
Submit aRunnableto be executed.- Parameters:
runnable- theRunnableto be executed.
-
submit
Submit one or moreRunnables to be executed.- Parameters:
runnables- theRunnables to be executed.
-
submitToHead
Submit aRunnableto be executed at the head of the queue.- Parameters:
runnable- theRunnableto be executed.
-
submitOrRun
- Parameters:
runnable- theRunnableto run on-queue.
-
runOrSubmit
@Nonnull public <E extends Throwable> CompletableFuture<Void> runOrSubmit(FragileRunnable<E> fragileRunnable) Runs the givenFragileRunnableon the calling thread ifisInQueue()is true. Queues the givenFragileRunnableto be run on-queue ifisInQueue()is false. Useful for cases where the caller wishes to block until the givenFragileRunnablecompletes execution but the caller may or may not already be running on-queue. If theFragileRunnablethrows aThrowableduring execution, it will be caught and used to complete the returnedCompletableFutureexceptionally.- Parameters:
fragileRunnable- theFragileRunnableto run on-queue. must not be null.- Returns:
- a
CompletableFuturewhich will be completed after the givenFragileRunnableis ran. it will already be completed when called on a thread whereisInQueue()is true, else it will be completed once the queue runs the givenFragileRunnable. - Throws:
NullPointerException- if the givenFragileRunnableis null
-
runOrSubmit
@Nonnull public <T,E extends Throwable> CompletableFuture<T> runOrSubmit(FragileSupplier<T, E> fragileSupplier) Runs the givenFragileSupplieron the calling thread ifisInQueue()is true. Queues the givenFragileSupplierto be run on-queue ifisInQueue()is false. Useful for cases where the caller wishes to block until the givenFragileSuppliercompletes execution but the caller may or may not already be running on-queue. If theFragileSupplierthrows aThrowableduring execution, it will be caught and used to complete the returnedCompletableFutureexceptionally.- Parameters:
fragileSupplier- theFragileSupplierto run on-queue. must not be null.- Returns:
- a
CompletableFuturewhich will be completed after the givenFragileSupplieris ran with the value returned by callingFragileSupplier.get(). it will already be completed when called on a thread whereisInQueue()is true, else it will be completed once the queue runs the givenFragileSupplier. - Throws:
NullPointerException- if the givenFragileSupplieris null
-
pause
public void pause()Pause execution of queuedRunnables. -
resume
public void resume()Resume execution of queuedRunnables. -
getSize
public int getSize() -
isInQueue
public boolean isInQueue()- Returns:
trueif this thread is executing inside this queue.
-
requireInQueue
public void requireInQueue()Call to check if the current code is being executed inside this queue.- Throws:
IllegalStateException- if flow reaches here without going through this queue
-
requireInQueue
Call to check if the current code is being executed inside this queue.- Parameters:
message- The message to use in the thrown exception if the check fails- Throws:
IllegalStateException- if flow reaches here without going through this queue
-
isIdle
public boolean isIdle() -
truncate
public boolean truncate()Call to forcibly remove queued Runnables- Returns:
- true if elements were cleared, false if no action taken
-