Class LazyExecutorService
- All Implemented Interfaces:
Executor,ExecutorService
In essence, a returned Future represents a "canned" method call and once the call has been performed, the Future returns the cached result.
Both this class and the returned Future are thread-safe.
- Author:
- tobe@google.com (Torbjorn Gannholm), jlevy@google.com (Jared Levy), cpovirk@google.com (Chris Povirk)
-
Constructor Summary
ConstructorsConstructorDescriptionCreates an instance using aMoreExecutors.newDirectExecutorService()for the backing service.LazyExecutorService(ExecutorService backingService) Creates an instance using the givenExecutorServiceas the backing service. -
Method Summary
Modifier and TypeMethodDescriptionbooleanawaitTermination(long timeout, TimeUnit unit) voidAlways throws a RejectedExecutionException because using this method does not make sense from either a lazy execution perspective or a cached result perspective.invokeAll(Collection<? extends Callable<T>> tasks) ExecutorService requires that this method should not return until all tasks are completed, which precludes lazy execution.invokeAll(Collection<? extends Callable<T>> tasks, long timeout, TimeUnit unit) ExecutorService requires that this method should not return until all tasks are completed or the timeout expires, which precludes lazy execution.<T> TinvokeAny(Collection<? extends Callable<T>> tasks) Always throws a RejectedExecutionException because using this method does not make sense from either a lazy execution perspective or a cached result perspective.<T> TinvokeAny(Collection<? extends Callable<T>> tasks, long timeout, TimeUnit unit) Always throws a RejectedExecutionException because using this method does not make sense from either a lazy execution perspective or a cached result perspective.booleanbooleanvoidshutdown()Shuts this service down, but leaves the backing service untouched.Trying to interpret the assumptions about the contract of this method in the light of this implementation, it seems most reasonable to take the view that all tasks are running, even if the processing has not actually started.Future<?><T> Future<T><T> Future<T>
-
Constructor Details
-
LazyExecutorService
public LazyExecutorService()Creates an instance using aMoreExecutors.newDirectExecutorService()for the backing service. -
LazyExecutorService
Creates an instance using the givenExecutorServiceas the backing service.The backing service will only be used to execute tasks and it may be shared by several instances or used for other purposes. Shutdowns of this instance will not shut down the backing service.
If you shut down the backing service, this instance will be shut down automatically and all tasks submitted to this instance that have not yet been submitted to the backing service will be considered cancelled.
-
-
Method Details
-
shutdown
public void shutdown()Shuts this service down, but leaves the backing service untouched.- Specified by:
shutdownin interfaceExecutorService
-
shutdownNow
Trying to interpret the assumptions about the contract of this method in the light of this implementation, it seems most reasonable to take the view that all tasks are running, even if the processing has not actually started. Therefore, unfinished tasks will be cancelled and an empty list will be returned.- Specified by:
shutdownNowin interfaceExecutorService
-
isShutdown
public boolean isShutdown()- Specified by:
isShutdownin interfaceExecutorService
-
isTerminated
public boolean isTerminated()- Specified by:
isTerminatedin interfaceExecutorService
-
awaitTermination
- Specified by:
awaitTerminationin interfaceExecutorService- Throws:
InterruptedException
-
submit
- Specified by:
submitin interfaceExecutorService
-
submit
- Specified by:
submitin interfaceExecutorService
-
submit
- Specified by:
submitin interfaceExecutorService
-
invokeAll
@CanIgnoreReturnValue public <T> List<Future<T>> invokeAll(Collection<? extends Callable<T>> tasks) throws InterruptedException ExecutorService requires that this method should not return until all tasks are completed, which precludes lazy execution. Tasks are run in parallel, as far as the backing service allows.This method makes sense from a cached result perspective but not from a lazy execution perspective.
- Specified by:
invokeAllin interfaceExecutorService- Throws:
InterruptedException
-
invokeAll
@CanIgnoreReturnValue public <T> List<Future<T>> invokeAll(Collection<? extends Callable<T>> tasks, long timeout, TimeUnit unit) throws InterruptedException ExecutorService requires that this method should not return until all tasks are completed or the timeout expires, which precludes lazy execution. Tasks are run in parallel, as far as the backing service allows. Timeout is done as a best-effort in case of the default same thread executor.This method makes sense from a cached result perspective but not from a lazy execution perspective.
- Specified by:
invokeAllin interfaceExecutorService- Throws:
InterruptedException
-
invokeAny
Always throws a RejectedExecutionException because using this method does not make sense from either a lazy execution perspective or a cached result perspective.- Specified by:
invokeAnyin interfaceExecutorService
-
invokeAny
Always throws a RejectedExecutionException because using this method does not make sense from either a lazy execution perspective or a cached result perspective.- Specified by:
invokeAnyin interfaceExecutorService
-
execute
Always throws a RejectedExecutionException because using this method does not make sense from either a lazy execution perspective or a cached result perspective.
-