Executor

  执行已提交的 Runnable 任务对象。此接口提供一种将任务提交与每个任务将如何运行的机制(包括线程使用的细节、调度等)分离开来的方法。Executor 接口并没有严格地要求执行是异步的。

public interface Executor {
void execute(Runnable command);
}

ExecutorService

  ExecutorService是Executor的子类,扩展了更多的方法。提供了管理终止的方法,以及可为跟踪一个或多个异步任务执行状况而生成 Future 的方法。 可以关闭 ExecutorService,这将导致其拒绝新任务。

  提供两个方法来关闭 ExecutorService。 shutdown()方法在终止前允许执行以前提交的任务,而 shutdownNow() 方法阻止等待任务的启动并试图停止当前正在执行的任务。

     关闭任务执行,已经提交的会等执行完再关闭*/
void shutdown(); /**
* 立即关闭任务执行*/
List<Runnable> shutdownNow(); /**
是否被shutdown*/
boolean isShutdown(); /**
在shutdown方法被调用后,如果所有任务结束则返回true*/
boolean isTerminated(); /**
    在shutdown方法被调用后,阻塞直到所有任务完成。可以设置timeout时间,如果超时,返回false。
*/
boolean awaitTermination(long timeout, TimeUnit unit)
throws InterruptedException;

  提供三个方法来跟踪一个异步任务执行。

/**
* 执行一个callable,返回一个future*/
<T> Future<T> submit(Callable<T> task); /**
* 执行一个callable,返回一个future,通过future的get方法获得result值。*/
<T> Future<T> submit(Runnable task, T result); /**
*执行一个runnable,返回一个future*/
Future<?> submit(Runnable task);

  提供四个方法来执行批量任务

/**
执行多个callable,返回多个future,该方法会一直阻塞到所有任务完成*/
<T> List<Future<T>> invokeAll(Collection<? extends Callable<T>> tasks)
throws InterruptedException; /**
执行多个callable,返回多个future,该方法会一直阻塞到所有任务完成,如果timeout,抛出异常,取消尚未执行的任务*/
<T> List<Future<T>> invokeAll(Collection<? extends Callable<T>> tasks,
long timeout, TimeUnit unit)
throws InterruptedException; /**
* 任意一个callable执行成功后返回,取消尚未执行完的任务*/
<T> T invokeAny(Collection<? extends Callable<T>> tasks)
throws InterruptedException, ExecutionException; /**
* 任意一个callable执行成功后返回,取消尚未执行的任务,如果timeout,抛出异常,取消尚未执行的任务*/
<T> T invokeAny(Collection<? extends Callable<T>> tasks,
long timeout, TimeUnit unit)
throws InterruptedException, ExecutionException, TimeoutException;

ThreadPoolExecutor

  ThreadPoolExecutor是ExecutorService的一个实现类,它使用池线程执行每个提交的任务。

  ThreadPoolExecutor内部用一个变量保存了两个内容:所有有效线程的数量各个线程的状态(runState)。

private final AtomicInteger ctl = new AtomicInteger(ctlOf(RUNNING, 0));

  ThreadPoolExecutor内部有一个队列,当提交任务时,首先会提交到队列中,执行任务时会从队列中获取任务。

  ThreadPoolExecutor将根据corePoolSize(参见 getCorePoolSize())和 maximumPoolSize(参见 getMaximumPoolSize()) 设置的边界自动调整池大小。当新任务在方法 execute(java.lang.Runnable) 中提交时,如果运行的线程少于 corePoolSize, 则创建新线程来处理请求,即使有线程是空闲的。 如果运行的线程多于 corePoolSize 而少于 maximumPoolSize,则仅当队列满时才创建新线程。 如果设置的 corePoolSize 和 maximumPoolSize 相同,则创建了固定大小的线程池。 如果将 maximumPoolSize 设置为基本的无界值(如 Integer.MAX_VALUE),则允许池适应任意数量的并发任务。

java执行器的更多相关文章

  1. JAVA学习笔记及知识积累

    为什么说Java具有跨平台特性? 我们知道计算机只认识1,0两种电平的信号,所有信息或者计算指令最终都编码成16进制的机器码,这些机器码作为程序保存于计算机的内存中,由CPU去单个取指令执行直到程序执 ...

  2. Java IO_003.Reader与Writer--字符流以及编码对数据的操作(读取与写入)

    Java IO之Reader与Writer对象常用操作(包含了编码问题的处理) 涉及到文件(非文件夹)内容的操作,如果是纯文本的情况下,除了要用到File(见之前文章),另外就必须用到字符输入流或字符 ...

  3. (私人收藏)[开发必备]最全Java离线快速查找手册(可查询可学习,带实例)

    (私人收藏)[开发必备]最全Java离线快速查找手册(可查询可学习,带实例) https://pan.baidu.com/s/1L54VuFwCdKVnQGVc8vD1TQnwmj java手册 Ja ...

  4. HowToDoInJava Java 教程·翻译完成

    原文:HowToDoInJava 协议:CC BY-NC-SA 4.0 欢迎任何人参与和完善:一个人可以走的很快,但是一群人却可以走的更远. ApacheCN 学习资源 目录 核心 Java 教程 什 ...

  5. 分布式任务调度平台XXL-JOB

    <分布式任务调度平台XXL-JOB>       一.简介 1.1 概述 XXL-JOB是一个轻量级分布式任务调度框架,其核心设计目标是开发迅速.学习简单.轻量级.易扩展.现已开放源代码并 ...

  6. windows的一些好用命令-自己总结:

    在win+R运行框中:     cmd:进入命令行界面     msconfig:可以查看“系统配置”     msinfo32:查看系统信息     services.msc打开"服务&q ...

  7. JVM调优参数、方法、工具以及案例总结

    这种文章挺难写的,一是JVM参数巨多,二是内容枯燥乏味,但是想理解JVM调优又是没法避开的环节,本文主要用来总结梳理便于以后翻阅,主要围绕四个大的方面展开,分别是JVM调优参数.JVM调优方法(流程) ...

  8. Spark案例分析

    一.需求:计算网页访问量前三名 import org.apache.spark.rdd.RDD import org.apache.spark.{SparkConf, SparkContext} /* ...

  9. 【翻译十九】-java之执行器

    Executors In all of the previous examples, there's a close connection between the task being done by ...

随机推荐

  1. jmeter性能测试入门使用参数化

    我经常使用jmeter进行接口测试,这个工具还是很好用的.昨天收到一个需求,需要压测一下接口,jmeter进行接口测试,使用cvs文件进行多个数据参数化. 临时准备了一下发现忘记怎么做参数化了,自己百 ...

  2. servlet的生命周期和工作原理介绍

    一.servlet生命周期 Servlet生命周期分为三个阶段: 1)初始化阶段: 调用init()方法 2)响应客户请求阶段:调用service()方法 3)终止阶段:调用destroy()方法 T ...

  3. eclipse及idea使用问题记录(为了方便github同步,重新用Markdown写了一篇)

    使用eclipse或idea的时候会遇到各式各样的小问题,解决方案其实网上也大都搜得到,但是下次遇到的时候总是想不起来如何解决,还要花费时间再次查资料.所以以后把遇到的问题都记录一下. @ 目录 Ec ...

  4. VUE 中引入百度地图(vue-Baidu-Map)

    1.安装 $ npm install vue-baidu-map --save 2.全局注册,在main.js中引入以下代码 import BaiduMap from 'vue-baidu-map' ...

  5. Java成员变量和局部变量的区别

    定义位置不同: 成员变量:类中方法外 分为类变量(static修饰).实例变量(没有使用static修饰) 局部变量:方法内.代码块内 默认值不同: 成员变量:有默认初始化值 局部变量:没有默认初始化 ...

  6. 弱校验之@NotNull@NotEmpty@NotBlank

    @NotNull 适用于非空判断 The annotated element must not be {@code null}. CharSequence, Collection, Map 和 Arr ...

  7. SpringBoot项目 使用Jenkins进行自动化部署 gitlab打tag 生产测试环境使用 含配置中心

    脚本 node('master') { def mvnHome = tool 'maven11-free' def gitUrl = "http://gitlab.wdcloud.cc:10 ...

  8. SpringSecurity权限管理系统实战—九、数据权限的配置

    目录 SpringSecurity权限管理系统实战-一.项目简介和开发环境准备 SpringSecurity权限管理系统实战-二.日志.接口文档等实现 SpringSecurity权限管理系统实战-三 ...

  9. Burst

    Unity Burst 用户指南 https://blog.csdn.net/alph258/article/details/83997917 Burst https://unity3d.com/cn ...

  10. iOS 报错: linker command failed with exit code 1 (use -v to see invocation) 原因

    在iOS开发中,很多人会遇到这样的报错 linker command failed with exit code 1 (use -v to see invocation) 可能的原因如下: 1.引用出 ...