下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Spring3.2.6 框架多线程序配置【定时任务+线程池】费劲周折终于把这个功能配置起来了,在网上找到很多资料,大多数例子基本都是相互拷贝,前后不搭调,搞得不知所措。因此我把这次配置可以完整运行的示例程序整理出来,分享,希望有时间再进一步优化,共同进步。Spring配置文件:<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE beans PUBLIC "-/SPRING/DTD BEAN/EN" "/dt
2、d/spring-beans.dtd"><beans> <!- 线程池 -> <bean id="taskExecutor" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor"> <!- 核心线程数 -> <property name="corePoolSize" value="4" /> <!- 最大线程数 -> <proper
3、ty name="maxPoolSize" value="8" /> <!- 队列最大长度 -> <property name="queueCapacity" value="200" /> <!- 线程池维护线程所允许的空闲时间 -> <property name="keepAliveSeconds" value="300" /> <!- 线程池对拒绝任务(无线程可用)的处理策略 -> <property
4、 name="rejectedExecutionHandler"> <bean class="java.util.concurrent.ThreadPoolExecutor$CallerRunsPolicy" /> </property> </bean> <bean id="mainProcess" class="com.tz.controller.MainPro"> <property name="taskExecutor" ref=
5、"taskExecutor" /> </bean> <bean id="springScheduleExecutorTask" class="org.springframework.scheduling.concurrent.ScheduledExecutorTask"> <!- 要启动的主线程 -> <property name="runnable" ref="mainProcess" /> <!- 容器加载运行延迟1秒 ->
6、<property name="delay" value="1000" /> <!- 任务间隔时间(sleep时间)执行完第一组任务,执行第二组任务相隔时间,两个任务在时间上不应该相交 -> <property name="period" value="10000" /> </bean> <bean id="springScheduledExecutorFactoryBean" class="org.springframework.
7、scheduling.concurrent.ScheduledExecutorFactoryBean"> <property name="scheduledExecutorTasks"> <list> <ref bean="springScheduleExecutorTask" /> </list> </property> </bean> </beans>程序对应的类:MainPro.javapackage com.tz.controller;import
8、 org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;/* * 要起动的主线程 * author wyg20151013 */public class MainPro implements Runnable private ThreadPoolTaskExecutor taskExecutor; public MainPro()public MainPro(ThreadPoolTaskExecutor taskExecutor)this.taskExecutor = taskExecutor; public Thre
9、adPoolTaskExecutor getTaskExecutor() return taskExecutor;public void setTaskExecutor(ThreadPoolTaskExecutor taskExecutor) this.taskExecutor = taskExecutor; public void run() for(int i = 0; i < 25; i+) taskExecutor.execute(new MessagePrinterTask("Message = " + i); /等待池中线程执行完 while(taskEx
10、ecutor.getActiveCount()>0) try Thread.sleep(5000); catch (InterruptedException e) e.printStackTrace(); System.out.println("主线程分配完毕"); /* * 这个子线程来就是我们系统要处理的任务 * author wyg20151013 */ private class MessagePrinterTask implements Runnable private String message; public MessagePrinterTask(St
11、ring message) this.message = message; public void run() System.out.println(message); 补充知识:1、解析spring schedule来源:Spring在schedule这块支持JDK Timer、concurrent、quartz三种,这三种任务调度方案在实现机制和调用方法上都不同,但spring通过对其包装,使得基于spring能用统一的配置和编码风格来使用这三种schedule方案。总得来说这三种schedule都是基于scheduler->trigger->job的基本流程,因此spring
12、通过TimerFactoryBean、ScheduledExecutorFactoryBean和SchedulerFactoryBean分别实现JDK Timer、concurrent和quartz的基本流程。主要逻辑如下代码所示:TimerFactoryBeanjava view plaincopy1. public void afterPropertiesSet() 2. ("Initializing
13、 Timer"); 3. this.timer = createTimer(this.beanName, this.daemon); 4. / Register specified ScheduledTimerTasks, if necessary. &
14、#160;5. if (!ObjectUtils.isEmpty(this.scheduledTimerTasks) 6. /注册task和timer registerTasks(this.scheduledTimerTasks, this.timer); 7.
15、; 8. ScheduledExecutorFactoryBeanc-sharp view plaincopy1. public void afterPropertiesSet() 2. if (logger.isInfoEnabled() 3.
16、60; ("Initializing ScheduledExecutorService" + 4. (this.beanName !=&
17、#160;null ? " '" + this.beanName + "'" : ""); 5. 6. ScheduledExecutorService executor =&
18、#160; 7. createExecutor(this.poolSize, this.threadFactory, this.rejectedExecutionHandler); 8. / Register specified
19、ScheduledExecutorTasks, if necessary. 9. if (!ObjectUtils.isEmpty(this.scheduledExecutorTasks) 10. registerTasks(this.scheduledExecutorTa
20、sks, executor); 11. 12. / Wrap executor with an unconfigurable decorator. 13. this.exec
21、utor = (this.exposeUnconfigurableExecutor ? 14. Executors.unconfigurableScheduledExecutorService(executor) : executor); 15.
22、60;SchedulerFactoryBeanc-sharp view plaincopy1. public void afterPropertiesSet() throws Exception 2. . 3. / 初始化sceduler 4.
23、 initSchedulerFactory(schedulerFactory); 5. this.scheduler = createScheduler(schedulerFactory, this.schedulerName); 6. /注册listener、trigger和job 7. registerListeners(); 8.
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年水产养殖病害防控策略指南
- 2026青海西宁市城北区大堡子镇中心卫生院招聘卫生专业技术人员的1人备考题库含答案详解
- 2026浙江宁波市镇海中学国际部诚招学科双语教师备考题库及完整答案详解1套
- 2026年林下经济模式创新发展课
- 软件开发大数据模块开发规范手册
- 2026福建三明市永安市罗坊乡人民政府招聘编外聘用驾驶员1人备考题库及完整答案详解1套
- 2026年企业并购法律尽调实务培训
- 职业健康促进与企业健康管理未来趋势
- 驻马店2025年河南驻马店市平舆县人民医院招聘人事代理人员28人笔试历年参考题库附带答案详解
- 金华2025年浙江金华义乌市人民检察院司法雇员招录6人笔试历年参考题库附带答案详解
- 江苏省盐城市大丰区四校联考2025-2026学年七年级上学期12月月考历史试卷(含答案)
- 事业编退休报告申请书
- 原发性骨髓纤维化2026
- 半导体厂务项目工程管理 课件 项目6 净化室系统的设计与维护
- 河南省洛阳强基联盟2025-2026学年高二上学期1月月考英语试题含答案
- 2026年中考数学模拟试卷试题汇编-尺规作图
- 安全技术劳动保护措施管理规定
- 新建加油站可行性研究报告6118933
- 论高级管理人员应具备的财务知识
- GB/T 7354-2003局部放电测量
- GB/T 1690-1992硫化橡胶耐液体试验方法
评论
0/150
提交评论