Executor

java.util.concurrent.Executor接口的主要目的是要将“任务提交”和“任务执行”两者分离解耦。该接口定义了任务提交的方法,实现者可以提供不同的任务运行机制,解决具体的线程使用规则、调度方式等问题。

Executor只有一个方法,即void execute(Runnable command) ,它接受任何实现了Runnable的实例,这个实例代表了一个需要执行的任务。

Spring对Executor所提供的抽象

Spring的org.springframework.core.task.TaskExecutor接口等同于java.util.concurrent.Executor接口。该接口和JDK 5.0的Executor接口拥相同的execute(Runnable task)方法。TaskExecutor拥有一个SchedulingTaskExecutor子接口,新增了任务调度规则定制的功能。

Spring发行包中预定义TaskExecutor的实现

  • SyncTaskExecutor:

位于org.springframework.core.task包中,实现了TaskExecutor接口。这个实现不会异步执行任务,相反,每次调用都在发起调用的主线程中执行。

  • SimpleAsyncTaskExecutor:

位于org.springframework.core.task包中。这个实现没有使用线程池,在每次执行任务时都创建一个新线程。但是,它还是支持对并发总数设限,当超过线程并发总数限制时,阻塞新的任务直到有可用的资源。

<bean id="simpleAsyncTaskExecutor" class="org.springframework.core.task.SimpleAsyncTaskExecutor">
<property name="daemon" value="true" />
<property name="concurrencyLimit" value="2" />
<property name="threadNamePrefix" value="simpleAsyncTaskExecutor" />
</bean>
  • ConcurrentTaskExecutor:

位于org.springframework.scheduling.concurrent包中。该类是JDK 5.0的Executor的适配器,以便将JDK 5.0的Executor的当成Spring的TaskExecutor使用。

<bean id="concurrentTaskExecutor"   class="org.springframework.scheduling.concurrent.ConcurrentTaskExecutor"/>
  • SimpleThreadPoolTaskExecutor:

位于org.springframework.scheduling.quartz包中,这个类实际上是继承于Quartz的SimpleThreadPool类的子类,它将监听Spring的生命周期回调。当你有线程池,需要在Quartz和非Quartz组件中共用时,该类可以发挥它的用处。

<bean id="simpleThreadPoolTaskExecutor" class="org.springframework.scheduling.quartz.SimpleThreadPoolTaskExecutor">
<property name="makeThreadsDaemons" value="true"/>
<property name="threadCount" value="5" />
<property name="threadNamePrefix" value="simpleThreadPoolTaskExecutor"/>
<property name="waitForJobsToCompleteOnShutdown" value="true" />
</bean>
  • ThreadPoolTaskExecutor:

位于org.springframework.scheduling.concurrent包中。这个实现类只能在JDK 5.0中使用,它暴露的一些属性,方便在Spring中配置一个java.util.concurrent.ThreadPoolExecutor,并把它包装成TaskExecutor。

<bean id="threadPoolTaskExecutor" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">
<property name="corePoolSize" value="2" />
<property name="keepAliveSeconds" value="200" />
<property name="maxPoolSize" value="10" />
<property name="queueCapacity" value="60" />
</bean>
  • TimerTaskExecutor:

位于org.springframework.scheduling.timer包中。该类使用一个Timer作为其后台的实现。

<bean id="timerTaskExecutor" class="org.springframework.scheduling.timer.TimerTaskExecutor">
<property name="delay" value="10000" />
</bean>

在spring中进行基于Executor的任务调度的更多相关文章

  1. spring中实现基于注解实现动态的接口限流防刷

    本文将介绍在spring项目中自定义注解,借助redis实现接口的限流 自定义注解类 import java.lang.annotation.ElementType; import java.lang ...

  2. (转)Spring中@Async用法总结

     原文:http://blog.csdn.net/blueheart20/article/details/44648667 引言: 在Java应用中,绝大多数情况下都是通过同步的方式来实现交互处理的: ...

  3. Spring中@Async用法总结

    引言: 在Java应用中,绝大多数情况下都是通过同步的方式来实现交互处理的:但是在处理与第三方系统交互的时候,容易造成响应迟缓的情况,之前大部分都是使用多线程来完成此类任务,其实,在Spring 3. ...

  4. Spring中@Async

    在Java应用中,绝大多数情况下都是通过同步的方式来实现交互处理的:但是在处理与第三方系统交互的时候,容易造成响应迟缓的情况,之前大部分都是使用多线程来完成此类任务,其实,在spring 3.x之后, ...

  5. Spring中的@Async

    在Java应用中,绝大多数情况下都是通过同步的方式来实现交互处理的:但是在处理与第三方系统交互的时候,容易造成响应迟缓的情况,之前大部分都是使用多线程来完成此类任务,其实,在spring 3.x之后, ...

  6. spring中使用@Async注解进行异步处理

    引言: 在Java应用中,绝大多数情况下都是通过同步的方式来实现交互处理的:但是在处理与第三方系统交互的时候,容易造成响应迟缓的情况,之前大部分都是使用多线程来完成此类任务,其实,在spring 3. ...

  7. Spring中@Async用法详解及简单实例

    Spring中@Async用法 引言: 在Java应用中,绝大多数情况下都是通过同步的方式来实现交互处理的:但是在处理与第三方系统交互的时候,容易造成响应迟缓的情况,之前大部分都是使用多线程来完成此类 ...

  8. 【转】Spring中@Async

    Spring中@Async 在Java应用中,绝大多数情况下都是通过同步的方式来实现交互处理的:但是在处理与第三方系统交互的时候,容易造成响应迟缓的情况,之前大部分都是使用多线程来完成此类任务,其实, ...

  9. Spring中@Async-异步处理

    在Java应用中,绝大多数情况下都是通过同步的方式来实现交互处理的:但是在处理与第三方系统交互的时候,容易造成响应迟缓的情况,之前大部分都是使用多线程来完成此类任务,其实,在spring 3.x之后, ...

随机推荐

  1. 【HDU 4786 Fibonacci Tree】最小生成树

    一个由n个顶点m条边(可能有重边)构成的无向图(可能不连通),每条边的权值不是0就是1. 给出n.m和每条边的权值,问是否存在生成树,其边权值和为fibonacci数集合{1,2,3,5,8...}中 ...

  2. json概述及python处理json等数据类型

    <一,概念> 序列化(Serialization):将对象的状态信息转换为可以存储或可以通过网络传输的过程,传输的格式可以是JSON.XML等.反序列化(deserialization): ...

  3. PropertyGrid—为复杂属性提供下拉式编辑框和弹出式编辑框

    零.引言 PropertyGrid中我们经常看到一些下拉式的编辑方式(Color属性)和弹出式编辑框(字体),这些都是为一些复杂的属性提供的编辑方式,本文主要说明如何实现这样的编辑方式. 一.为属性提 ...

  4. Java基础笔记-String类

    String 类(被final修饰) 字符串是一种特殊的对象,一旦字符串被初始化就不可以被改变了.(内容不变) 例如: String  s = “abc”; String  s1 = new Stri ...

  5. JavaScript检测之basevalidate.js

    上篇文章「JavaScript检测原始值.引用值.属性」中涉及了大量有用的代码范例,为了让大家更方便的使用这些代码,博主特意把这些代码重新整理并托管到 GitHub,项目地址是:https://git ...

  6. css3系列教程--animation

    Animation:动画animationshi css的动画效果.需要定义keyframe动画对象来实现.为了兼容苹果/chrome,firefox,ie每次定义需要添加-webkit-,-moz- ...

  7. Android之Socket通信(一)

    一.服务器端,运行在PC机上 import java.io.*; import java.net.*; public class SimpleServer{     public static voi ...

  8. IIS ,未能加载文件或程序集“System.Web.DataVisualization, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35”或它的某一个依赖项。系统找不到指定的文件。

    1.解决办法:安装MSChart.exe程序 图表控件,下载附件,以管理员身份运行安装.

  9. sql linq lambda 对比

    . 查询Student表中的所有记录的Sname.Ssex和Class列. select sname,ssex,class from student Linq: from s in Students ...

  10. ES6笔记① var 和 let的区别

    let 和 var的区别    答:不同点在于作用域 1.(全局下)首先  let关键字声明的变量是这样写会导致错误. let声明的变量类似于”本地变量“,函数内如何不重新声明,还是会被改变 var ...