java.util.concurrent.CompletionService 接口 源码

线程池相关

源码:

package java.util.concurrent;

public interface CompletionService<V> {
    
    Future<V> submit(Callable<V> task);

    
    Future<V> submit(Runnable task, V result);

    
    Future<V> take() throws InterruptedException;

    
    Future<V> poll();

    
    Future<V> poll(long timeout, TimeUnit unit) throws InterruptedException;
}

接口 CompletionService<V>

所有已知实现类:

    ExecutorCompletionService

    将生产新的异步任务与使用已完成任务的结果分离开来的服务。

  • 生产者 submit 执行的任务。
  • 使用者 take 已完成的任务,并按照完成这些任务的顺序处理它们的结果。

    例如,CompletionService 可以用来管理异步 IO ,执行读操作的任务作为程序或系统的一部分提交,然后,当完成读操作时,会在程序的不同部分执行其他操作,执行操作的顺序可能与所请求的顺序不同。

    通常,CompletionService 依赖于一个单独的 Executor 来实际执行任务,在这种情况下,CompletionService 只管理一个内部完成队列。ExecutorCompletionService 类提供了此方法的一个实现。

 

方法摘要

 Future<V> poll() 
          获取并移除表示下一个已完成任务的 Future,如果不存在这样的任务,则返回 null。
 Future<V> poll(long timeout, TimeUnit unit) 
          获取并移除表示下一个已完成任务的 Future,如果目前不存在这样的任务,则将等待指定的时间(如果有必要)。
 Future<V> submit(Callable<V> task) 
          提交要执行的值返回任务,并返回表示挂起的任务结果的 Future。
 Future<V> submit(Runnable task, V result) 
          提交要执行的 Runnable 任务,并返回一个表示任务完成的 Future,可以提取或轮询此任务。
 Future<V> take() 
          获取并移除表示下一个已完成任务的 Future,如果目前不存在这样的任务,则等待。

 

submit

Future<V> submit(Callable<V> task)

    提交要执行的值返回任务,并返回表示挂起的任务结果的 Future。在完成时,可能会提取或轮询此任务。

    参数:

    task - 要提交的任务

    返回:

        一个表示挂起的任务完成的 Future

    抛出:

    RejectedExecutionException - 如果不能安排要执行的任务

    NullPointerException - 如果该任务为 null

 

submit

Future<V> submit(Runnable task,
                 V result)

    提交要执行的 Runnable 任务,并返回一个表示任务完成的 Future,可以提取或轮询此任务。

    参数:

    task - 要提交的任务

    result - 要返回的已成功完成任务的结果

    返回:

        一个表示挂起的任务完成的 Future,其 get() 方法将返回完成时给出的结果值

    抛出:

    RejectedExecutionException - 如果不能安排要执行的任务

    NullPointerException - 如果该任务为 null

 

take

Future<V> take()
               throws InterruptedException

    获取并移除表示下一个已完成任务的 Future,如果目前不存在这样的任务,则等待。

    返回:

    表示下一个已完成任务的 Future

    抛出:

    InterruptedException - 如果在等待时被中断

 

poll

Future<V> poll()

    获取并移除表示下一个已完成任务的 Future,如果不存在这样的任务,则返回 null。

    返回:

        表示下一个已完成任务的 Future;如果不存在这样的任务,则返回 null

 

poll

Future<V> poll(long timeout,
               TimeUnit unit)
               throws InterruptedException

    获取并移除表示下一个已完成任务的 Future,如果目前不存在这样的任务,则将等待指定的时间(如果有必要)。

    参数:

    timeout - 放弃之前需要等待的时间长度,以 unit 为时间单位

    unit - 确定如何解释 timeout 参数的 TimeUnit

    返回:

        表示下一个已完成任务的 Future;如果等待了指定时间仍然不存在这样的任务,则返回 null

    抛出:

    InterruptedException - 如果在等待时被中断

猜你喜欢

转载自my.oschina.net/u/3858564/blog/2963598