@Beta @GwtIncompatible public final class TestingExecutors extends Object
ExecutorService
for testing.Modifier and Type | Method and Description |
---|---|
static com.google.common.util.concurrent.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 com.google.common.util.concurrent.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-2016. All Rights Reserved.