美文网首页
Java基础-线程-ExecutorCompletionServ

Java基础-线程-ExecutorCompletionServ

作者: 16325 | 来源:发表于2020-02-28 13:29 被阅读0次

    ExecutorCompletionService

    CompletionService 方法,分别如下:

    Future submit(Callable task);
    submit 用于提交一个 Callable 对象,用于提交一个可以获得结果的线程任务

    Future submit(Runnable task, V result);
    submit 用于提交一个 Runnable 对象及 result 对象,类似于上面的 submit,但是 runnable 的返回值 void 无法获得线程的结果,所以添加了 result 用于做为参数的桥梁

    Future take() throws InterruptedException;
    take 用于取出最新的线程执行结果,注意这里是阻塞的

    Future poll();
    take 用于取出最新的线程执行结果,是非阻塞的,如果没有结果就返回 null

    Future poll(long timeout, TimeUnit unit) throws InterruptedException;
    同上,只是加了一个超时时间

    另外,CompletionService 是接口,无法直接使用,通常使用他的实现类 ExecutorCompletionService
    可能看到这里会很好奇 ExecutorCompletionService 实现原理,其实原理很简单,他在内部维护了一个阻塞队列,提交的任务,先执行完的先进入队列,所以你通过 poll 或 take 获得的肯定是最先执行完的任务结果。

    用处:多个线程,先执行完的进阻塞队列,然后可以按执行顺序获取结果

    相关文章

      网友评论

          本文标题:Java基础-线程-ExecutorCompletionServ

          本文链接:https://www.haomeiwen.com/subject/aivxqhtx.html