`

ExecutorService 分析

阅读更多
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;
分享到:
评论

相关推荐

    java8集合源码分析-java8-learning:Java8新特性学习

    集合源码分析 Java8特性 [TOC] 1. Lambda 表达式 与传统匿名内部类写法的对比 无返回值 // 传统写法 new Thread(new Runnable() { @Override public void run() { System.out.println("worker thread is running"); ...

    【多线程高并发编程】三 Callable源码分析

    程序猿学社的GitHub,欢迎Star ...本文已记录到github,形成...源码分析2.1 第一步,实现Callable接口2.2 FutureTask类结构图2.3 RunableFuture接口2.4 Runnable接口2.5 Future接口2.6 FutureTask源码分析后记 前言 通过上

    最简单的爬虫-WebMagic 0.73 源码

    作为爬虫框架,它使用httpclient作为获取网页工具、使用Jsoup作为分析页面定位抓取内容、使用ExecutorService线程池作为定时增量抓取、Jdiy作为持久层框架。不熟悉这些名词的同学们可以先行百度一下这些都是什么,起...

    netty NioEventLoopGroup的类图分析

    ExecutorService接口:提供了异步执行任务能力的执行器 ScheduledExecutorService接口:提供了执行定时任务的能力 EventExecutorGroup接口:ExecutorService的分组接口 AbstractEventExecutorGroup:...

    java8集合源码分析-javaInterview:java面试

    集合源码分析 2020年深圳java打工仔找工作记录帖,有一段时间的社畜了,所以直奔主题, 找的资料都是面试常用的,整理一下,希望能帮到大家 主要三个部分 1.搜集面试题目 2.java资料 3 找工作日期记录,看从准备工作开始,...

    汪文君高并发编程实战视频资源全集

    ├─第一阶段 │ 源码+ppt.rar ...ExecutorService讲解_.mp4  高并发编程第三阶段39讲 ThreadPoolExecutor七大构造参数详细讲解_.mp4  高并发编程第三阶段40讲 ThreadPoolExecutor关闭(很重要)精讲...

    汪文君高并发编程实战视频资源下载.txt

    ├─第一阶段 │ 源码+ppt.rar ...ExecutorService讲解_.mp4  高并发编程第三阶段39讲 ThreadPoolExecutor七大构造参数详细讲解_.mp4  高并发编程第三阶段40讲 ThreadPoolExecutor关闭(很重要)精讲...

    Android编程图片加载类ImageLoader定义与用法实例分析

    3)使用了线程池ExecutorService mThreadPool技术 4)使用了Semaphore 信号来控制变量按照先后顺序执行,避免空指针的问题 如何使用: 在Adapter里加载图片时 代码如下:ImageLoader.getInstance.loadImage(...

    java8看不到源码-awesome-articles:不同主题的文章精选列表

    线程解释,线程状态是什么以及如何分析线程转储。 - 通过分步指南及其背后的原因解决真正复杂的问题。 Maven - Maven 配置文件 调试 - 类加载器、JVM 字节码内部结构 缓存 - JCache API Refcard 和通用术语解释 字节...

    Android开发资料合集--续

    Handler+ExecutorService(线程池)+MessageQueue+缓存模式 45 25、Bitmap操作 49 获得输入流 49 将输入流转化为Bitmap流 49 给ImageView对象赋值 49 获取SD卡上的文件存储路径 50 将图片保存到SD卡上 50 26、TextView...

    ForkJoinPool

    ForkJoinPool初略分析 多线程 ForkJoinPool 补充:为什么不适合执行有block比如有io的任务 线程block的时候,线程池会调度线程池队列中的其他未线程运行,这是ExecutorService的机制; 但是ForkJoinPool中的...

    Note_scalad.tar.gz

    常规Java工具,算法,加密,数据库,面试题,源代码分析,解决方案: Alibaba_Druid AngularJS_String_SubString Big_Data_ETL C# CROS CrossOrigin_Request Eclipse_Referenced_File_Contains_Errors Git_Language_...

    Java并发编程实战

    7.2.2 关闭ExecutorService127 7.2.3 “毒丸”对象128 7.2.4 示例:只执行一次的服务129 7.2.5 shutdownNow的局限性130 7.3 处理非正常的线程终止132 7.4 JVM关闭135 7.4.1 关闭钩子135 7.4.2 守护线程136 ...

    java核心知识点整理.pdf

    可达性分析............................................................................................................................................... 26 2.3.2. 2.3.3. 老年代 ........................

    JAVA核心知识点整理(有效)

    可达性分析............................................................................................................................................... 26 2.3.2. 2.3.3. 老年代 ........................

Global site tag (gtag.js) - Google Analytics