taskexecutor_弹簧和线程:TaskExecutor

taskexecutor

在Web应用程序中使用线程并不罕见,尤其是当您必须开发长期运行的任务时。

考虑到spring,我们必须格外注意并使用它已经提供的工具,而不是生成我们自己的线程。 我们希望线程由spring管理,因此能够在没有任何影响的情况下使用应用程序的其他组件,并在不进行任何工作的情况下优雅地关闭应用程序。

Spring提供TaskExecutor作为与执行程序打交道的抽象。 Spring的TaskExecutor接口与java.util.concurrent.Executor接口相同。 Spring发行版中包含许多TaskExecutor的预构建实现,您可以从官方文档中找到有关它们的更多信息。 通过为您的Spring环境提供TaskExecutor实现,您将能够将TaskExecutor注入到您的bean中并可以访问托管线程。

package com.gkatzioura.service;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.core.task.TaskExecutor;
import org.springframework.stereotype.Service;
import java.util.List;/*** Created by gkatzioura on 4/26/17.*/
@Service
public class AsynchronousService {@Autowiredprivate ApplicationContext applicationContext;@Autowiredprivate TaskExecutor taskExecutor;public void executeAsynchronously() {taskExecutor.execute(new Runnable() {@Overridepublic void run() {//TODO add long running task}});}
}

第一步是将TaskExecutor配置添加到我们的spring应用程序中。

package com.gkatzioura.config;import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.task.TaskExecutor;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;import java.util.concurrent.Executor;/*** Created by gkatzioura on 4/26/17.*/
@Configuration
public class ThreadConfig {@Beanpublic TaskExecutor threadPoolTaskExecutor() {ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();executor.setCorePoolSize(4);executor.setMaxPoolSize(4);executor.setThreadNamePrefix("default_task_executor_thread");executor.initialize();return executor;}}

一旦我们的执行程序设置完成,过程就很简单。 我们将执行程序注入到spring组件中,然后提交包含要执行任务的Runnable类。

由于我们的异步代码可能还需要与应用程序的其他组件进行交互并注入它们,因此一种不错的方法是创建原型范围内的可运行实例。

package com.gkatzioura;import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;/*** Created by gkatzioura on 10/18/17.*/
@Component
@Scope("prototype")
public class MyThread implements Runnable {private static final Logger LOGGER = LoggerFactory.getLogger(MyThread.class);@Overridepublic void run() {LOGGER.info("Called from thread");}
}

然后,我们准备将执行程序注入到我们的服务中,并使用它来执行可运行的实例。

package com.gkatzioura.service;import com.gkatzioura.MyThread;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.core.task.TaskExecutor;
import org.springframework.stereotype.Service;import java.util.List;/*** Created by gkatzioura on 4/26/17.*/
@Service
public class AsynchronousService {@Autowiredprivate TaskExecutor taskExecutor;@Autowiredprivate ApplicationContext applicationContext;public void executeAsynchronously() {MyThread myThread = applicationContext.getBean(MyThread.class);taskExecutor.execute(myThread);}}

在下一篇文章中,我们将通过使用spring的异步函数将多重读取的代码库提高到一个新的水平。

您可以在github上找到源代码。

翻译自: https://www.javacodegeeks.com/2017/10/spring-threads-taskexecutor.html

taskexecutor

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/334714.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux 命令之 find -- 查找文件和目录/搜索文件和目录

文章目录命令介绍语法格式常用选项文件类型参考示例(一)在当前目录及其子目录下搜索内容中含有“140.206.111.111”的所有文件(二)列出当前目录及其子目录下所有文件和目录(三)在指定目录下查找特定名称的文…

javaserver_什么是JavaServer Faces(JSF)–(第2部分)

javaserverFacelets声明语言 在第1部分中,我介绍了JavaServer Pages(JSF)背后的基本思想 。 在本文中,我想介绍Facelets声明语言 。 HTML标签 我们遇到的第一个标签是代表HTML元素HTML标签。 这些实际上只是HTML标记(…

微博如何发订阅消息_微信订阅号或将大变天,微博8年前就这么干了...

近日,微信又偷偷的做了一个大胆的尝试,将公众号消息排序改版,不再按照一直以来的“时间轴展示”,而是学起了微博,变成了“智能排序”。微信的“阅读效率优化”排序不过可能是为了独树一帜,微信管这种排序方…

html怎么填充颜色渐变,CSS实现不规则图形,填充渐变色

JS Bin/* 背景图片实现 */.background-box {width: 400px;height: 100px;/* 透明色替换为当前背景底色 */background:linear-gradient(-135deg, transparent 50px, red , yellow) top right;background-size: 50% 50%;background-repeat: no-repeat;}/* 边框实现 */.border-box…

Linux 命令之 locate -- 文件查找工具(查找文件/搜索文件)

文章目录一、命令介绍二、相关文件说明配置文件 updatedb.conf三、更新数据库四、常用选项五、命令示例搜索文件名以指定字符串开头的文件查找名称中含有指定字符串的文件使用正则表达式查找特定条件的文件一、命令介绍 locate 命令用来查找文件或目录。 locate 命令要比 find…

算法正义_正义联盟的Sprint Boot

算法正义正义联盟(Justice League)进入了黑暗时代,强大的Darkseid征服了人类。 蝙蝠侠在《神力女超人》的帮助下,努力使联盟与一个关键方面失联。 适当的正义联盟成员管理系统。 由于时间不在他们身边,他们不想经历繁琐…

indesign如何画弧线_彩铅画入门教程,如何给独角兽设计一款好发型

戳这里 → 查看“爱蜜干货文章目录”本次综合训练的目的1.挖掘你的绘画感和想象力,彩色鬃毛色彩大家可以自由发挥哦!2.练习彩铅的长线条,现在练习的长条还是比较简单的,下次综合训练我们还会练习更加复杂的3.彩铅这种画…

微型计算机作为载体的部件是,大工11秋《计算机应用基础》辅导资料二

计算机应用基础辅导资料二主题:计算机基础知识的辅导资料学习时间:2011年10月10日-10月16日内容:这周我们主要学习课件..第二章计算机的基础知识,本章的学习要求及需要掌握的重点内容如下&#…

Linux 命令之 whereis -- 显示命令及相关文件的路径

文章目录一、命令介绍二、选项参数三、参考示例(一)显示 ln 命令的程序和 man 手册页的位置(二)显示 tomcat 相关文件的路径一、命令介绍 whereis 命令用来定位指令的二进制程序、源代码文件和man手册页等相关文件的路径。 wher…

markdown如何设置图片大小_Gitee(码云)实现免费 Markdown 图床

“阅读本文大概需要 6 分钟前言Markdown是一种易于上手的轻量级标记语言,由于其目的在于注重文字内容而不是排版,目前很受大家欢迎,写完一篇文档可以直接复制到其他各大平台上,不用担心格式字体等混乱问题但是文章中如果引用了某个…

json-tree api_什么是JSON处理(JSON-P API)?

json-tree apiJava EE中的JSON-P简介 JSON处理1.0( JSR 353 )的Java API是一个低级,轻量级的JSON解析器和生成器,它提供了在属性和值级别上操作JSON数据的能力。 JSR 353提供了两种JSON处理模型: 对象模型和流模型。 …

适合利用计算机模拟的是,计算机模拟在数学建模中的应用

计算机模拟在数学建模中的应用计算机模拟是按时间来划分的,因为计算机模拟实质上是系统随时间变化而变化的动态写照,以下是小编搜集整理的一篇探究计算机模拟在数学建模应用的论文范文,供大家阅读参考。【摘要】本文主要阐述了如何利用计算机…

噪音声压和声功率的区别_南昌汽车隔音,深入了解汽车噪音的来源、危害以及解决方案...

汽车噪音带来的危害:汽车噪音对人体健康的影响是多方面的。噪音作用于人的中枢神经系统,使人们大脑皮层的兴奋与抑制平衡失调,导致条件反射异常,使脑血管张力遭到损害。这些生理上的变化,在早期能够恢复原状&#xff0…

Linux 命令之 which -- 查找并显示给定命令的绝对路径(查找命令的位置/查询命令的位置/搜索命令的位置/查看命令的位置)

文章目录一、命令介绍二、选项参数三、参考示例(一)查找 java 命令的位置一、命令介绍 which 命令的作用是在 PATH 变量指定的路径中,搜索某个系统命令的位置,并且返回第一个搜索结果。 运维人员在日常工作中经常使用 which 命令…

lua加密教程_我们相信加密! 教程

lua加密教程许多人认为加密是一个复杂的主题,这很难理解。 可以实现其某些方面,但是每个人都可以理解它在更高层次上的工作方式。 这就是我要处理的这篇文章。 用简单的术语解释它是如何工作的,然后使用一些代码。 是的,我们信任…

生产用计算机软件管理台账,计算机台账管理系统

计算机台账管理系统计算机台账管理系统是什么?什么是计算机台账管理系统?对于设备管理而言,设备台账是其重要的组成部分,计算机台账管理系统对设备的编号、适用规格、年限、使用部门等具体信息进行管理,方便设备资产的…

Linux 查看数据库MySQL安装文件和安装目录的命令

文章目录数据库 MySQL 相关目录说明/var/lib/mysql/usr/bin/usr/share/mysql/usr/lib/mysql/etc/my.cnf查看 MySQL 相关文件/目录的命令查看已安装的 MySQL 相关软件包名称查看某个软件包的所有安装文件查看 MySQL 相关的所有文件使用命令 find 查找含有 mysql 关键字的文件路径…

java关键字和标识符_Java数据类型和标识符

java关键字和标识符在本教程中,我们将了解Java中的数据类型和标识符。 Java语言具有丰富的数据类型实现。 数据类型指定大小和可以存储在标识符中的值的类型。 Java数据类型分为两类: 原始数据类型 非原始数据类型 原始类型 Java定义了八种原始数据…

fcpx怎么合成延时摄影_延时摄影合成终极后期教程

原来常见的延时摄影,一般都是软件生成或视频加速实现,这种方法简单快捷,但是后期处理空间小,画质差。现在追求高画质都会采用拍摄照片,后期合成,索尼等相机型号,自带有间隔拍摄功能,…

狂妄之人怎么用计算机弹,【B】 Undertale Sans战斗曲 MEGALOVANIA狂妄之人

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼66/ 98868955/ 98868944/ 98868933/ 98868966/ 98868955/ 98868944/ 98868933/ 98868966/ 98868955/ 98868944/ 98868933/ 98868966/ 98868955/ 98868944/ 98868933/ 9886898 88 8 866 888998689 8889-* ///-/* 99 9(快速按) */…