当前位置:首页 > 开发 > 编程语言 > 编程 > 正文

ExecutorService 分析

发表于: 2013-03-26   作者:czj4451   来源:转载   浏览次数:
摘要: public interface ExecutorService extends Executor { // 优雅地关闭:先前提交的任务会继续执行完成,但不接受新的任务。 // 对于已关闭的ExecutorService没有影响。 void shutdown(); // 强行关闭:试图停止所有正在执行的任务,挂起等待执行的任务,返回等待执行任务的清单
public interface ExecutorService extends Executor {
    // 优雅地关闭:先前提交的任务会继续执行完成,但不接受新的任务。
    // 对于已关闭的ExecutorService没有影响。
    void shutdown();

    // 强行关闭:试图停止所有正在执行的任务,挂起等待执行的任务,返回等待执行任务的清单,而不是被中断任务的清单。
    // 不能保证停止当前的任务会成功:典型的实现是通过调用Thread.interrupt()方法,所以不能回应该方法的任务将无法关闭。
    List<Runnable> shutdownNow();

    // 该线程池是否已关闭。在调用了shutdown()或shutdownNow()方法后,该方法返回true,此时线程池可能并未终止,调用isTerminated()为false。
    boolean isShutdown();

    // 该线程池是否终止。只有调用shutdown()或shutdownNow()一定时间后,该方法才可能返回true
    boolean isTerminated();

    // 等待线程池终止。在所有任务执行完成,或者超时,或者当前线程被中断前,该方法一直阻塞。
    boolean awaitTermination(long timeout, TimeUnit unit)
        throws InterruptedException;

    // 提交一个有返回结果的任务。如果成功完成,Future的get()方法会返回执行结果。
    // Executors包含一系列方法,能够把其它普通的closure-like对象,转化成可以执行的Callable对象。
    <T> Future<T> submit(Callable<T> task);

    // 和上面方法类似。Runnable没有返回值,我们可以提供个预设值result,如果任务成功完成,将返回该result。
    <T> Future<T> submit(Runnable task, T result);

    // 同上。如果成功完成,Future.get()返回null。
    Future<?> submit(Runnable task);

    // 执行指定的任务集,所有的任务完成后,返回一个保存了每个执行结果的Future集。
    // 任务完成:可能是正常完成或者抛出异常。
    // 可能的异常:InterruptedException: 被中断,没有完成的任务会被取消;
    // NullPointerException: tasks为null,或者里面的元素为null
    // RejectedExecutionException: 某个任务被拒绝执行
    <T> List<Future<T>> invokeAll(Collection<? extends Callable<T>> tasks)
        throws InterruptedException;

    // 和上面类似,区别是加了时间限制:超时会返回,未完成的任务会取消。
    <T> List<Future<T>> invokeAll(Collection<? extends Callable<T>> tasks,
                                  long timeout, TimeUnit unit)
        throws InterruptedException;

    // 执行指定的任务集,有一个任务执行成功后就返回该结果。正常返回或抛异常,没有完成的任务会被取消。
    // 如果没有任务执行成功,则抛出ExecutionException
    // 如果tasks为空,则抛出IllegalArgumentException
    <T> T invokeAny(Collection<? extends Callable<T>> tasks)
        throws InterruptedException, ExecutionException;

    // 同上,有超时限制。
    <T> T invokeAny(Collection<? extends Callable<T>> tasks,
                    long timeout, TimeUnit unit)
        throws InterruptedException, ExecutionException, TimeoutException;

ExecutorService 分析

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
接口 java.util.concurrent.ExecutorService 表述了异步执行的机制,并且可以让任务在后台执行。壹
先来一段Exector,ExectorService接口的集成体系 public interface Executor{ void execute(Runnable
今天看zookeeper连接到zk的客户端代码,使用countDownLatch来实现只有连接上之后再进行下一步的操作
Executor Executor仅仅是一个简单的接口,其定义如下 public interface Executor { void execute(Ru
一、Exectuor框架简介 Java从1.5版本开始,为简化多线程并发编程,引入全新的并发编程包:java.util.
用ExecutorService运行多线程, 实现Callable接口,执行并取得每个线程的值的场景,如下图所示: 代
分析UIWindow The UIWindow class defines an object known as a window that manages and coordina
早上衣明志 在QQ群里说他的博客开源了,地址在 https://github.com/qihangnet/MZBlog,基于NancyFX
这是susu给我的一份关于glut的示例代码,里面涉及到的内容有:用glut来完成菜单管理,文本显示,显
redis 分析 Author:fox Date:2010-06-06 1 简介 redis是一个类似memcached的key/value存储系统,
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号