public class SingleLaneExecutorService extends AbstractExecutorService
ExecutorService
that executes submitted tasks sequentially
on top of another generic arbitrary ExecutorService
.
In general, ExecutorService
do not place constraints about the order in which submitted
tasks are executed. This class takes such an executor service, then creates a stronger guarantee
on the order of the executions. Namely, the submitted tasks are executed in the FIFO order,
and no two tasks are executed concurrently.
A large number of SingleLaneExecutorService
s backed by a single cached executor service
is more efficient than the same number of single-threaded ExecutorService
because of
the thread sharing.
This class is named SingleLaneExecutorService
because it's akin to create a driving lane
in a high way. You can have many lanes, but each lane is strictly sequentially ordered.
Constructor and Description |
---|
SingleLaneExecutorService(ExecutorService base) |
Modifier and Type | Method and Description |
---|---|
boolean |
awaitTermination(long timeout,
TimeUnit unit) |
void |
execute(Runnable command) |
boolean |
isShutdown() |
boolean |
isTerminated() |
void |
shutdown() |
List<Runnable> |
shutdownNow() |
invokeAll, invokeAll, invokeAny, invokeAny, newTaskFor, newTaskFor, submit, submit, submit
public SingleLaneExecutorService(ExecutorService base)
base
- Executor service that actually provides the threads that execute tasks.public void shutdown()
Note that this does not shutdown the wrapped ExecutorService
.
@NonNull public List<Runnable> shutdownNow()
Note that this does not shutdown the wrapped ExecutorService
.
public boolean isShutdown()
public boolean isTerminated()
public boolean awaitTermination(long timeout, TimeUnit unit) throws InterruptedException
InterruptedException
public void execute(@NonNull Runnable command)
Copyright © 2004–2022. All rights reserved.