@Beta @GwtIncompatible public final class TestingExecutors extends java.lang.Object
ExecutorService
for testing.Modifier and Type | Method and Description |
---|---|
static ListeningScheduledExecutorService |
noOpScheduledExecutor()
Returns a
ScheduledExecutorService that never executes anything. |
static com.google.common.util.concurrent.testing.SameThreadScheduledExecutorService |
sameThreadScheduledExecutor()
Creates a scheduled executor service that runs each task in the thread that invokes
execute/submit/schedule , as in CallerRunsPolicy . |
public static ListeningScheduledExecutorService noOpScheduledExecutor()
ScheduledExecutorService
that never executes anything.
The shutdownNow
method of the returned executor always returns an empty list despite
the fact that everything is still technically awaiting execution. The getDelay
method
of any ScheduledFuture
returned by the executor will always return the max long value
instead of the time until the user-specified delay.
public static com.google.common.util.concurrent.testing.SameThreadScheduledExecutorService sameThreadScheduledExecutor()
execute/submit/schedule
, as in CallerRunsPolicy
. This applies both to individually
submitted tasks and to collections of tasks submitted via invokeAll
, invokeAny
,
schedule
, scheduleAtFixedRate
, and scheduleWithFixedDelay
. In the case
of tasks submitted by invokeAll
or invokeAny
, tasks will run serially on the
calling thread. Tasks are run to completion before a Future
is returned to the caller
(unless the executor has been shutdown).
The returned executor is backed by the executor returned by MoreExecutors.newDirectExecutorService()
and subject to the same constraints.
Although all tasks are immediately executed in the thread that submitted the task, this
ExecutorService
imposes a small locking overhead on each task submission in order to
implement shutdown and termination behavior.
Because of the nature of single-thread execution, the methods scheduleAtFixedRate
and scheduleWithFixedDelay
are not supported by this class and will throw an
UnsupportedOperationException.
The implementation deviates from the ExecutorService
specification with regards to
the shutdownNow
method. First, "best-effort" with regards to canceling running tasks is
implemented as "no-effort". No interrupts or other attempts are made to stop threads executing
tasks. Second, the returned list will always be empty, as any submitted task is considered to
have started execution. This applies also to tasks given to invokeAll
or invokeAny
which are pending serial execution, even the subset of the tasks that have not yet
started execution. It is unclear from the ExecutorService
specification if these should
be included, and it's much easier to implement the interpretation that they not be. Finally, a
call to shutdown
or shutdownNow
may result in concurrent calls to invokeAll/invokeAny
throwing RejectedExecutionException, although a subset of the tasks may
already have been executed.
Copyright © 2010-2018. All Rights Reserved.