# CompletionService

public interface **CompletionService**

|---|---|---|
| Known Indirect Subclasses [ExecutorCompletionService](https://developers.google.com/j2objc/javadoc/jre/reference/java/util/concurrent/ExecutorCompletionService.html)\<V\> |---|---| | [ExecutorCompletionService](https://developers.google.com/j2objc/javadoc/jre/reference/java/util/concurrent/ExecutorCompletionService.html)\<V\> | A `https://developers.google.com/j2objc/javadoc/jre/reference/java/util/concurrent/CompletionService.html` that uses a supplied `https://developers.google.com/j2objc/javadoc/jre/reference/java/util/concurrent/Executor.html` to execute tasks. | |||

A service that decouples the production of new asynchronous tasks
from the consumption of the results of completed tasks. Producers
`submit` tasks for execution. Consumers `take`
completed tasks and process their results in the order they
complete. A `CompletionService` can for example be used to
manage asynchronous I/O, in which tasks that perform reads are
submitted in one part of a program or system, and then acted upon
in a different part of the program when the reads complete,
possibly in a different order than they were requested.

Typically, a `CompletionService` relies on a separate
`https://developers.google.com/j2objc/javadoc/jre/reference/java/util/concurrent/Executor.html` to actually execute the tasks, in which case the
`CompletionService` only manages an internal completion
queue. The `https://developers.google.com/j2objc/javadoc/jre/reference/java/util/concurrent/ExecutorCompletionService.html` class provides an
implementation of this approach.

Memory consistency effects: Actions in a thread prior to
submitting a task to a `CompletionService`
[*happen-before*](https://developers.google.com/j2objc/javadoc/jre/reference/java/util/concurrent/package-summary#MemoryVisibility)
actions taken by that task, which in turn *happen-before*
actions following a successful return from the corresponding `take()`.

### Public Method Summary

|---|---|
| abstract [Future](https://developers.google.com/j2objc/javadoc/jre/reference/java/util/concurrent/Future.html)\<V\> | [poll](https://developers.google.com/j2objc/javadoc/jre/reference/java/util/concurrent/CompletionService.html#poll(long,%20java.util.concurrent.TimeUnit))(long timeout, [TimeUnit](https://developers.google.com/j2objc/javadoc/jre/reference/java/util/concurrent/TimeUnit.html) unit) Retrieves and removes the Future representing the next completed task, waiting if necessary up to the specified wait time if none are yet present. |
| abstract [Future](https://developers.google.com/j2objc/javadoc/jre/reference/java/util/concurrent/Future.html)\<V\> | [poll](https://developers.google.com/j2objc/javadoc/jre/reference/java/util/concurrent/CompletionService.html#poll())() Retrieves and removes the Future representing the next completed task, or `null` if none are present. |
| abstract [Future](https://developers.google.com/j2objc/javadoc/jre/reference/java/util/concurrent/Future.html)\<V\> | [submit](https://developers.google.com/j2objc/javadoc/jre/reference/java/util/concurrent/CompletionService.html#submit(java.lang.Runnable,%20V))([Runnable](https://developers.google.com/j2objc/javadoc/jre/reference/java/lang/Runnable.html) task, V result) Submits a Runnable task for execution and returns a Future representing that task. |
| abstract [Future](https://developers.google.com/j2objc/javadoc/jre/reference/java/util/concurrent/Future.html)\<V\> | [submit](https://developers.google.com/j2objc/javadoc/jre/reference/java/util/concurrent/CompletionService.html#submit(java.util.concurrent.Callable<V>))([Callable](https://developers.google.com/j2objc/javadoc/jre/reference/java/util/concurrent/Callable.html)\<V\> task) Submits a value-returning task for execution and returns a Future representing the pending results of the task. |
| abstract [Future](https://developers.google.com/j2objc/javadoc/jre/reference/java/util/concurrent/Future.html)\<V\> | [take](https://developers.google.com/j2objc/javadoc/jre/reference/java/util/concurrent/CompletionService.html#take())() Retrieves and removes the Future representing the next completed task, waiting if none are yet present. |

## Public Methods

#### public abstract [Future](https://developers.google.com/j2objc/javadoc/jre/reference/java/util/concurrent/Future.html)\<V\>
**poll**
(long timeout, [TimeUnit](https://developers.google.com/j2objc/javadoc/jre/reference/java/util/concurrent/TimeUnit.html) unit)

Retrieves and removes the Future representing the next
completed task, waiting if necessary up to the specified wait
time if none are yet present.

##### Parameters

| timeout | how long to wait before giving up, in units of `unit` |
| unit | a `TimeUnit` determining how to interpret the `timeout` parameter |
|---|---|

##### Returns

- the Future representing the next completed task or `null` if the specified waiting time elapses before one is present

##### Throws

| [InterruptedException](https://developers.google.com/j2objc/javadoc/jre/reference/java/lang/InterruptedException.html) | if interrupted while waiting |
|---|---|

#### public abstract [Future](https://developers.google.com/j2objc/javadoc/jre/reference/java/util/concurrent/Future.html)\<V\>
**poll**
()

Retrieves and removes the Future representing the next
completed task, or `null` if none are present.

##### Returns

- the Future representing the next completed task, or `null` if none are present

#### public abstract [Future](https://developers.google.com/j2objc/javadoc/jre/reference/java/util/concurrent/Future.html)\<V\>
**submit**
([Runnable](https://developers.google.com/j2objc/javadoc/jre/reference/java/lang/Runnable.html) task, V result)

Submits a Runnable task for execution and returns a Future
representing that task. Upon completion, this task may be
taken or polled.

##### Parameters

| task | the task to submit |
| result | the result to return upon successful completion |
|---|---|

##### Returns

- a Future representing pending completion of the task, and whose `get()` method will return the given result value upon completion

##### Throws

| [RejectedExecutionException](https://developers.google.com/j2objc/javadoc/jre/reference/java/util/concurrent/RejectedExecutionException.html) | if the task cannot be scheduled for execution |
| [NullPointerException](https://developers.google.com/j2objc/javadoc/jre/reference/java/lang/NullPointerException.html) | if the task is null |
|---|---|

#### public abstract [Future](https://developers.google.com/j2objc/javadoc/jre/reference/java/util/concurrent/Future.html)\<V\>
**submit**
([Callable](https://developers.google.com/j2objc/javadoc/jre/reference/java/util/concurrent/Callable.html)\<V\> task)

Submits a value-returning task for execution and returns a Future
representing the pending results of the task. Upon completion,
this task may be taken or polled.

##### Parameters

| task | the task to submit |
|---|---|

##### Returns

- a Future representing pending completion of the task

##### Throws

| [RejectedExecutionException](https://developers.google.com/j2objc/javadoc/jre/reference/java/util/concurrent/RejectedExecutionException.html) | if the task cannot be scheduled for execution |
| [NullPointerException](https://developers.google.com/j2objc/javadoc/jre/reference/java/lang/NullPointerException.html) | if the task is null |
|---|---|

#### public abstract [Future](https://developers.google.com/j2objc/javadoc/jre/reference/java/util/concurrent/Future.html)\<V\>
**take**
()

Retrieves and removes the Future representing the next
completed task, waiting if none are yet present.

##### Returns

- the Future representing the next completed task

##### Throws

| [InterruptedException](https://developers.google.com/j2objc/javadoc/jre/reference/java/lang/InterruptedException.html) | if interrupted while waiting |
|---|---|