Package org.jmock.lib.concurrent
Class DeterministicScheduler
- java.lang.Object
-
- org.jmock.lib.concurrent.DeterministicScheduler
-
- All Implemented Interfaces:
java.util.concurrent.Executor,java.util.concurrent.ExecutorService,java.util.concurrent.ScheduledExecutorService
public class DeterministicScheduler extends java.lang.Object implements java.util.concurrent.ScheduledExecutorServiceAScheduledExecutorServicethat executes commands on the thread that callsrunNextPendingCommand,runUntilIdleortick. Objects of this class can also be used asExecutors orExecutorServices if you just want to control background execution and don't need to schedule commands, but it may be simpler to use aDeterministicExecutor.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description private classDeterministicScheduler.CallableRunnableAdapter<T>private classDeterministicScheduler.ScheduledTask<T>
-
Field Summary
Fields Modifier and Type Field Description private DeltaQueue<DeterministicScheduler.ScheduledTask<?>>deltaQueue
-
Constructor Summary
Constructors Constructor Description DeterministicScheduler()
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description booleanawaitTermination(long timeout, java.util.concurrent.TimeUnit unit)private UnsupportedSynchronousOperationExceptionblockingOperationsNotSupported()voidexecute(java.lang.Runnable command)<T> java.util.List<java.util.concurrent.Future<T>>invokeAll(java.util.Collection<? extends java.util.concurrent.Callable<T>> tasks)<T> java.util.List<java.util.concurrent.Future<T>>invokeAll(java.util.Collection<? extends java.util.concurrent.Callable<T>> tasks, long timeout, java.util.concurrent.TimeUnit unit)<T> TinvokeAny(java.util.Collection<? extends java.util.concurrent.Callable<T>> tasks)<T> TinvokeAny(java.util.Collection<? extends java.util.concurrent.Callable<T>> tasks, long timeout, java.util.concurrent.TimeUnit unit)booleanisIdle()Reports whether scheduler is "idle": has no commands pending immediate execution.booleanisShutdown()booleanisTerminated()voidrunNextPendingCommand()Runs the next command scheduled to be executed immediately.voidrunUntilIdle()Runs all commands scheduled to be executed immediately but does not tick time forward.java.util.concurrent.ScheduledFuture<?>schedule(java.lang.Runnable command, long delay, java.util.concurrent.TimeUnit unit)<V> java.util.concurrent.ScheduledFuture<V>schedule(java.util.concurrent.Callable<V> callable, long delay, java.util.concurrent.TimeUnit unit)java.util.concurrent.ScheduledFuture<?>scheduleAtFixedRate(java.lang.Runnable command, long initialDelay, long period, java.util.concurrent.TimeUnit unit)java.util.concurrent.ScheduledFuture<?>scheduleWithFixedDelay(java.lang.Runnable command, long initialDelay, long delay, java.util.concurrent.TimeUnit unit)voidshutdown()private java.lang.UnsupportedOperationExceptionshutdownNotSupported()java.util.List<java.lang.Runnable>shutdownNow()java.util.concurrent.Future<?>submit(java.lang.Runnable command)<T> java.util.concurrent.Future<T>submit(java.lang.Runnable command, T result)<T> java.util.concurrent.Future<T>submit(java.util.concurrent.Callable<T> callable)voidtick(long duration, java.util.concurrent.TimeUnit timeUnit)Runs time forwards by a given duration, executing any commands scheduled for execution during that time period, and any background tasks spawned by the scheduled tasks.private longtoTicks(long duration, java.util.concurrent.TimeUnit timeUnit)
-
-
-
Field Detail
-
deltaQueue
private final DeltaQueue<DeterministicScheduler.ScheduledTask<?>> deltaQueue
-
-
Method Detail
-
tick
public void tick(long duration, java.util.concurrent.TimeUnit timeUnit)Runs time forwards by a given duration, executing any commands scheduled for execution during that time period, and any background tasks spawned by the scheduled tasks. Therefore, when a call to tick returns, the executor will be idle.- Parameters:
duration-timeUnit-
-
runUntilIdle
public void runUntilIdle()
Runs all commands scheduled to be executed immediately but does not tick time forward.
-
runNextPendingCommand
public void runNextPendingCommand()
Runs the next command scheduled to be executed immediately.
-
isIdle
public boolean isIdle()
Reports whether scheduler is "idle": has no commands pending immediate execution.- Returns:
- true if there are no commands pending immediate execution, false if there are commands pending immediate execution.
-
execute
public void execute(java.lang.Runnable command)
- Specified by:
executein interfacejava.util.concurrent.Executor
-
schedule
public java.util.concurrent.ScheduledFuture<?> schedule(java.lang.Runnable command, long delay, java.util.concurrent.TimeUnit unit)- Specified by:
schedulein interfacejava.util.concurrent.ScheduledExecutorService
-
schedule
public <V> java.util.concurrent.ScheduledFuture<V> schedule(java.util.concurrent.Callable<V> callable, long delay, java.util.concurrent.TimeUnit unit)- Specified by:
schedulein interfacejava.util.concurrent.ScheduledExecutorService
-
scheduleAtFixedRate
public java.util.concurrent.ScheduledFuture<?> scheduleAtFixedRate(java.lang.Runnable command, long initialDelay, long period, java.util.concurrent.TimeUnit unit)- Specified by:
scheduleAtFixedRatein interfacejava.util.concurrent.ScheduledExecutorService
-
scheduleWithFixedDelay
public java.util.concurrent.ScheduledFuture<?> scheduleWithFixedDelay(java.lang.Runnable command, long initialDelay, long delay, java.util.concurrent.TimeUnit unit)- Specified by:
scheduleWithFixedDelayin interfacejava.util.concurrent.ScheduledExecutorService
-
awaitTermination
public boolean awaitTermination(long timeout, java.util.concurrent.TimeUnit unit) throws java.lang.InterruptedException- Specified by:
awaitTerminationin interfacejava.util.concurrent.ExecutorService- Throws:
java.lang.InterruptedException
-
invokeAll
public <T> java.util.List<java.util.concurrent.Future<T>> invokeAll(java.util.Collection<? extends java.util.concurrent.Callable<T>> tasks) throws java.lang.InterruptedException- Specified by:
invokeAllin interfacejava.util.concurrent.ExecutorService- Throws:
java.lang.InterruptedException
-
invokeAll
public <T> java.util.List<java.util.concurrent.Future<T>> invokeAll(java.util.Collection<? extends java.util.concurrent.Callable<T>> tasks, long timeout, java.util.concurrent.TimeUnit unit) throws java.lang.InterruptedException- Specified by:
invokeAllin interfacejava.util.concurrent.ExecutorService- Throws:
java.lang.InterruptedException
-
invokeAny
public <T> T invokeAny(java.util.Collection<? extends java.util.concurrent.Callable<T>> tasks) throws java.lang.InterruptedException, java.util.concurrent.ExecutionException- Specified by:
invokeAnyin interfacejava.util.concurrent.ExecutorService- Throws:
java.lang.InterruptedExceptionjava.util.concurrent.ExecutionException
-
invokeAny
public <T> T invokeAny(java.util.Collection<? extends java.util.concurrent.Callable<T>> tasks, long timeout, java.util.concurrent.TimeUnit unit) throws java.lang.InterruptedException, java.util.concurrent.ExecutionException, java.util.concurrent.TimeoutException- Specified by:
invokeAnyin interfacejava.util.concurrent.ExecutorService- Throws:
java.lang.InterruptedExceptionjava.util.concurrent.ExecutionExceptionjava.util.concurrent.TimeoutException
-
isShutdown
public boolean isShutdown()
- Specified by:
isShutdownin interfacejava.util.concurrent.ExecutorService
-
isTerminated
public boolean isTerminated()
- Specified by:
isTerminatedin interfacejava.util.concurrent.ExecutorService
-
shutdown
public void shutdown()
- Specified by:
shutdownin interfacejava.util.concurrent.ExecutorService
-
shutdownNow
public java.util.List<java.lang.Runnable> shutdownNow()
- Specified by:
shutdownNowin interfacejava.util.concurrent.ExecutorService
-
submit
public <T> java.util.concurrent.Future<T> submit(java.util.concurrent.Callable<T> callable)
- Specified by:
submitin interfacejava.util.concurrent.ExecutorService
-
submit
public java.util.concurrent.Future<?> submit(java.lang.Runnable command)
- Specified by:
submitin interfacejava.util.concurrent.ExecutorService
-
submit
public <T> java.util.concurrent.Future<T> submit(java.lang.Runnable command, T result)- Specified by:
submitin interfacejava.util.concurrent.ExecutorService
-
toTicks
private long toTicks(long duration, java.util.concurrent.TimeUnit timeUnit)
-
blockingOperationsNotSupported
private UnsupportedSynchronousOperationException blockingOperationsNotSupported()
-
shutdownNotSupported
private java.lang.UnsupportedOperationException shutdownNotSupported()
-
-