Class ExecutionCompletionService<V>

java.lang.Object
org.jgroups.blocks.executor.ExecutionCompletionService<V>
All Implemented Interfaces:
CompletionService<V>

public class ExecutionCompletionService<V> extends Object implements CompletionService<V>
A CompletionService that uses a supplied ExecutionService to execute tasks. This class arranges that submitted tasks are, upon completion, placed on a queue accessible using take. The class is lightweight enough to be suitable for transient use when processing groups of tasks.

This class must be used instead of a ExecutorCompletionService provided from java.util.concurrent package. The ExecutorCompletionService may not be used since it requires the use of a non serializable RunnableFuture object. Since a ExecutionService may only be used with serializable request objects, this class must be used instead.

  • Field Details

  • Constructor Details

    • ExecutionCompletionService

      public ExecutionCompletionService(ExecutionService executor)
      Creates an ExecutorCompletionService using the supplied executor for base task execution and a LinkedBlockingQueue as a completion queue.
      Parameters:
      executor - the executor to use
      Throws:
      NullPointerException - if executor is null
    • ExecutionCompletionService

      public ExecutionCompletionService(ExecutionService executor, BlockingQueue<NotifyingFuture<V>> completionQueue)
      Creates an ExecutorCompletionService using the supplied executor for base task execution and the supplied queue as its completion queue.
      Parameters:
      executor - the executor to use
      completionQueue - the queue to use as the completion queue normally one dedicated for use by this service
      Throws:
      NullPointerException - if executor is null
    • ExecutionCompletionService

      protected ExecutionCompletionService(ExecutionService executor, BlockingQueue<NotifyingFuture<V>> completionQueue, ExecutionCompletionService<V>.QueueingListener listener)
      This constructor is here if someone wants to override this class and provide their own QueueingListener to possibly listen in on futures being finished
      Parameters:
      executor - the executor to use
      completionQueue - the queue to use as the completion queue normally one dedicated for use by this service
      listener - the listener to notify. To work properly this listner should at minimum call the super.futureDone or else this completion service may not work correctly.
      Throws:
      NullPointerException - if executor is null
  • Method Details

    • submit

      public Future<V> submit(Callable<V> task)
      invalid @inheritDoc
      {@inheritDoc CompletionService}

      This future object may not be used as a NotifyingFuture. That is because internally this class sets the listener to provide ability to add to the queue.

      Specified by:
      submit in interface CompletionService<V>
    • submit

      public Future<V> submit(Runnable task, V result)
      invalid @inheritDoc
      {@inheritDoc CompletionService}

      This future object may not be used as a NotifyingFuture. That is because internally this class sets the listener to provide ability to add to the queue.

      Specified by:
      submit in interface CompletionService<V>
    • take

      public NotifyingFuture<V> take() throws InterruptedException
      invalid @inheritDoc
      {@inheritDoc CompletionService}

      This future may safely be used as a NotifyingFuture if desired. This is because if it tries to set a listener it will be called immediately since the task has already been completed.

      Specified by:
      take in interface CompletionService<V>
      Throws:
      InterruptedException
    • poll

      public NotifyingFuture<V> poll()
      invalid @inheritDoc
      {@inheritDoc CompletionService}

      This future may safely be used as a NotifyingFuture if desired. This is because if it tries to set a listener it will be called immediately since the task has already been completed.

      Specified by:
      poll in interface CompletionService<V>
    • poll

      public NotifyingFuture<V> poll(long timeout, TimeUnit unit) throws InterruptedException
      invalid @inheritDoc
      {@inheritDoc CompletionService}

      This future may safely be used as a NotifyingFuture if desired. This is because if it tries to set a listener it will be called immediately since the task has already been completed.

      Specified by:
      poll in interface CompletionService<V>
      Throws:
      InterruptedException