org.jclouds.concurrent
Class MoreExecutors

java.lang.Object
  extended by org.jclouds.concurrent.MoreExecutors

@Beta
public class MoreExecutors
extends Object

functions related to or replacing those in MoreExecutors

Author:
Adrian Cole

Nested Class Summary
static class MoreExecutors.SameThreadExecutorService
           
 
Constructor Summary
MoreExecutors()
           
 
Method Summary
static ExecutorService sameThreadExecutor()
          Taken from @link com.google.common.util.concurrent.MoreExecutors} as it was hidden and therefore incapable of instanceof checks.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

MoreExecutors

public MoreExecutors()
Method Detail

sameThreadExecutor

public static ExecutorService sameThreadExecutor()
Taken from @link com.google.common.util.concurrent.MoreExecutors} as it was hidden and therefore incapable of instanceof checks. Creates an executor service that runs each task in the thread that invokes execute/submit, as in ThreadPoolExecutor.CallerRunsPolicy This applies both to individually submitted tasks and to collections of tasks submitted via invokeAll or invokeAny. In the latter case, 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).

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.

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 © 2009-2012 jclouds. All Rights Reserved.