一、文档概述
1.1 文档目的
本文主要软件中的通用任务处理框架,不限是一种思想、一种设计、一种实现。所属通用不限语言(包括:C/C++/Java/OC/Swift等),是一种通用方案。
应用场景
- 业务跑批轮训等待处理
- 失败异常重试
- 定时处理任务
1.2 内容
任务、任务调度、池化技术
1.3 术语解释
- 任务: Task,需要依靠计算机程序完成的一系列事情
- 调度: Control,执行控制任务的指挥,处罚,规则程序
- 任务调度: Schedule,使用一系列的触发规则在特定的时间点指挥计算机完成一些列的事情
二、任务
2.1 概述
2.2 案例
2.2.1 定时器
- Timer
Timer timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
System.out.println("执行任务");
}
}, 1000, 1000);
timer.schedule(new TimerTask() {
@Override
public void run() {
System.out.println("执行任务2");
}
}, 1000, 1000);
- ScheduledExecutor
核心:每一个被调度的任务都会由线程池中一个线程去执行,因此任务是并发的,而且相互不会产生干扰。

ScheduledExecutor.png
- Quartz

Quartz.png

Quartz2.png
<--单机版Quartz调用方法-->
import org.quartz.job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
public class QuartzJobTask implements Job {
@Override
public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
System.out.println("执行任务");
}
}
main() {
// 使用quartz完成每隔一秒执行一次的任务
Scheduler scheduler = new StdSchedulerFactory().getScheduler();
// 生成一个具体执行的jobdetail
JobDetail jobDetail = JobBuilder.newJob(QuartzJobTask.class).withIdentity("jobName", "groupName").build();
// 生成一个可以出发jobdetail的trigger
Trigger trigger = TriggerBuilder.newTrigger().withIdentity("trigger", "group").withSchedule(CronScheduleBuilder.cronSchedule("0/1 * * * *?")).build();
scehduler.scheduleJob(jobDetail, trigger);
// 启动scheduler
scheduler.start();
}
2.2.2 分布式调度
- Quartz分布式版本
- Elastic-Job分片分布式
三、池化技术
池化技术是用来减少系统消耗,提升系统性能的。

ChiHua.png
简单来说,池化技术就是通过<font color=red>复用</font>来提升性能。
<font color=red size=3>总结:</font>池化技术,是靠将对象或连接做成池子的方式来<font color=red>复用整体的对象和连接的系统开销</font>,并<font color=red>限定</font>一个系统最终的<font color=red>连接和对象创建的容量</font>控制在池子限定的一个范围,达到宁可限不要烂的目的。
3.1 线程池
3.2 连接池
3.3 案例

WorkPriciple.png
- Java线程池
- 数据库连接池
- HttpClient连接池
- Redis连接池
- Tomcat连接及线程池
- Dubbo连接及线程池
四、终极设计
通用框架设计、实现方案、验证措施