1. spring提供了哪些任务执行器,是否有同步的任务执行器

有ThreadPoolTaskExecutor等执行器

同步可以用SyncTaskExecutor,但这个可以说不算一个线程池,因为还在原线程执行

也可以用ThreadPoolTaskExecutor结合FutureTask做到同步

此外还有

代码:

/*
* 文 件 名: Test000101.java
* 版 权: . Copyright 2008-2015, All rights reserved Information Technology Co.,Ltd.
* 描 述: <描述>
* 修 改 人: chen.simon
* 修改时间: 2016-5-11
*/
package org.simonme.mt.demo; import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask; import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.core.task.TaskExecutor; /**
* <一句话功能简述> <功能详细描述>
*
* @author Chenxiaguang
* @version [版本号, 2016-5-11]
* @see [相关类/方法]
* @since [产品/模块版本]
*/
public class Test000101
{ public static void main(String[] args)
{
execute(provideThreadPoolTaskExecutor());
execute(provideSyncTaskExecutor());
} /** <一句话功能简述>
* <功能详细描述>
* @see [类、类#方法、类#成员]
*/
private static void execute(TaskExecutor taskESExecutor)
{
System.out.println(taskESExecutor);
Callable<String> run = new Callable<String>()
{
public String call()
{
return runTask();
}
}; FutureTask<String> task = new FutureTask<String>(run);
taskESExecutor.execute(task);
System.out.println("Before get"); /**
* 下面的get 利用了FutureTask的阻塞特性,使得主线程等待 TaskExecutor异步执行完后拿到结果<br/>
* 此处虽说用的是异步的TaskExecutor,但是拿结果的动作还是同步的<br/>
*/
try
{
task.get();
}
catch (InterruptedException e)
{
e.printStackTrace();
}
catch (ExecutionException e)
{
e.printStackTrace();
}
System.out.println("After get");
} public static TaskExecutor provideThreadPoolTaskExecutor()
{
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext-0001.xml");
TaskExecutor taskESExecutor000101 = (TaskExecutor)applicationContext.getBean("taskESExecutor000101");
return taskESExecutor000101;
} public static TaskExecutor provideSyncTaskExecutor()
{
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext-0001.xml");
TaskExecutor taskESExecutor000102 = (TaskExecutor)applicationContext.getBean("taskESExecutor000102");
return taskESExecutor000102;
} private static String runTask()
{
try
{
Thread.sleep(2 * 1000l);
}
catch (InterruptedException e)
{
e.printStackTrace();
}
String result = "Finish";
System.out.println(result);
return result;
} }
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"
default-autowire="byName" default-lazy-init="false"> <bean id="taskESExecutor000101" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">
<property name="corePoolSize" value="10" />
<property name="maxPoolSize" value="50" />
<property name="queueCapacity" value="500" />
<property name="keepAliveSeconds" value="300" />
<property name="rejectedExecutionHandler">
<bean class="java.util.concurrent.ThreadPoolExecutor$DiscardOldestPolicy" />
</property>
</bean> <bean id="taskESExecutor000102" class="org.springframework.core.task.SyncTaskExecutor">
</bean> </beans>

2. SyncTaskExecutor与ThreadPoolTaskExecutor区别

前者是同步执行器,执行任务同步,见下图,还在主线程上

后者是线程池,执行任务异步,见下图,在另外的线程上

ThreadPoolTaskExecutor执行的堆栈图:

SyncTaskExecutor执行的堆栈图:

此外线程池这种任务执行器在任务执行完主线程不会退出。

Spring task executor同异步的更多相关文章

  1. Spring的任务调度@Scheduled注解——task:scheduler和task:executor的解析

    原文地址: https://blog.csdn.net/yx0628/article/details/80873774 一个简单的Spring定时任务的 demo,全部代码见下载地址:https:// ...

  2. Spring源码情操陶冶#task:executor解析器

    承接Spring源码情操陶冶-自定义节点的解析.线程池是jdk的一个很重要的概念,在很多的场景都会应用到,多用于处理多任务的并发处理,此处借由spring整合jdk的cocurrent包的方式来进行深 ...

  3. Spring 使用介绍(十二)—— Spring Task

    一.概述 1.jdk的线程池和任务调用器分别由ExecutorService.ScheduledExecutorService定义,继承关系如下: ThreadPoolExecutor:Executo ...

  4. 任务调度 Spring Task 4(一)

    深入浅出spring task定时任务 在工作中有用到spring task作为定时任务的处理,spring通过接口TaskExecutor和TaskScheduler这两个接口的方式为异步定时任务提 ...

  5. spring task 配置

    Spring对Quartz作了一个封装,同时,Spring自己也提供了一个任务定时器(spring-task),现把它总结一下.    对于Quartz,我们使用的时候主要是注重两个方面,一个是定时任 ...

  6. Quartz Spring与Spring Task总结

    Spring对Quartz作了一个封装,同时,Spring自己也提供了一个任务定时器(spring-task),现把它总结一下.    对于Quartz,我们使用的时候主要是注重两个方面,一个是定时任 ...

  7. spring定时任务轮询(spring Task)

    定时任务轮询比如任务自服务器启动就开始运行,并且每隔5秒执行一次. 以下用spring注解配置定时任务.1.添加相应的schema xmlns:task=" xsi:schemaLocati ...

  8. uartz Spring与Spring Task总结

    Spring对Quartz作了一个封装,同时,Spring自己也提供了一个任务定时器(spring-task),现把它总结一下.    对于Quartz,我们使用的时候主要是注重两个方面,一个是定时任 ...

  9. SpringBoot整合全局异常处理&SpringBoot整合定时任务Task&SpringBoot整合异步任务

    ============整合全局异常=========== 1.整合web访问的全局异常 如果不做全局异常处理直接访问如果报错,页面会报错500错误,对于界面的显示非常不友好,因此需要做处理. 全局异 ...

随机推荐

  1. ACM 独木舟上的旅行

    独木舟上的旅行 时间限制:3000 ms  |  内存限制:65535 KB 难度:2   描述 进行一次独木舟的旅行活动,独木舟可以在港口租到,并且之间没有区别.一条独木舟最多只能乘坐两个人,且乘客 ...

  2. 3分钟4个步骤超级简单入门配置lamp

    按照我下面的推荐博客进行3步安装,最后进行一步测试就完成了.环境:我的环境是在windows10中安装的VMware中安装的Ubuntu虚拟机,Windows8,7应该是一样的测试:分别用localh ...

  3. 【POJ】3133 Manhattan Wiring

    http://poj.org/problem?id=3133 题意:n×m的网格,有2个2,2个3,他们不会重合.还有障碍1.现在求2到2的路径和3到3的路径互不相交的最短长度-2.(2<=n, ...

  4. iOS 常用英语翻译

    1..serve advertisements within the app 服务应用中的广告.如果你的应用中集成了广告的时候,你需要勾选这一项.   √2.Attribute this app in ...

  5. linux 运行可执行文件version `GLIBC_2.17' not found

    http://www.cnblogs.com/q191201771/p/3875316.html root@socfpga:/media/ram/nfs/dvb# ./a.out ./a.: vers ...

  6. GO语言练习:map基本用法

    1.代码 2.运行 1.代码 文件:map.go package main import "fmt" type PersionInfo struct{ ID string Name ...

  7. CAS单点登录配置

    见http://download.csdn.net/detail/u010786672/6942715下载.

  8. 关于mysql(或MariaDB)中的用户账号格式

    之前在修改数据库本地root用户密码时,发现我远程连接的root用户的密码并没有改变,之后查了一下,发现原来这两个root不是同一个用户(汗..) 于是联想到之前配置数据库每次给用户赋予远程连接权限时 ...

  9. 常见26个jquery使用技巧详解(比如禁止右键点击、隐藏文本框文字等)

      来自:http://www.xueit.com/js/show-6015-1.aspx 本文列出jquery一些应用小技巧,比如有禁止右键点击.隐藏搜索文本框文字.在新窗口中打开链接.检测浏览器. ...

  10. 一次有趣的XSS漏洞挖掘分析(2)

    第一次和一套程序做了这么多次的斗争.今天基友又给我来信说,没得玩了.了解了下情况,是他拿着0day到处插,被人家发现了.还出了个公告,说所有***必须安装补丁.呵呵,性福总是走的这么突然.这乐子一下就 ...