java 模拟spring的Quartz

TimerTask.java

 

package cn.hk.test; import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Timer;


public class TimerTask extends java.util.TimerTask {
 
	//执行的类
	private Class clazz;
	//执行的类中的方法
	private String method;
	//执行的时间,只是这个时间没有spring中的cronExpression表达式强大
	private Date executeDate;
	//加入所有的类
	private  List<Class>  clazzs=null;
	//所有类中的方法
	private  List<String>  methods=null;
	//所有执行的时间列表
	private  List<Date> executeDates=null;
	
	private static Timer timer=new Timer();
	

	public TimerTask(Class clazz,String method,Date executeDate){
		instances();
		clazzs.add(clazz);
		methods.add(method);
		executeDates.add(executeDate);
		
		
	}
	private TimerTask(){}
	public  void start(){
		 
		System.out.println(executeDates.get(0));
		Date date=new Date(System.currentTimeMillis());
		//只有在当前的时间之前的才会执行,因为默认的Timer中的schedule的方法是会在时间已经过了也会执行的
		if(date.before(executeDates.get(0))){
			timer.schedule(this, executeDates.get(0));
		}
		
		
	} 

	/**
	 * 最终运行的方法
	 */
	
	public  void run(){
		
		if(equalsList()){
			
			for( int i=0;i<clazzs.size();i++){
				//得到对象
				
				try {
					Class clazz=clazzs.get(i);
					String strMethod=methods.get(i);
					Date executeDate=executeDates.get(i);
					if(clazz!=null&&strMethod!=null&&executeDate!=null){
						
						clazz=clazzs.get(i).newInstance().getClass();
						Method method=clazz.getMethod(methods.get(i), null);
						System.out.println(method.invoke(clazz.newInstance(),null));
					}
				
				} catch (SecurityException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				} catch (NoSuchMethodException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				} catch (IllegalArgumentException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				} catch (IllegalAccessException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				} catch (InvocationTargetException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				} catch (InstantiationException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				
			}
		}
	}
	/**
	 * 停止所有的方法
	 */
	public  void stop(){
		
		clazzs.clear();
		methods.clear();
		executeDates.clear();
	}
	private void instances(){
		clazzs=new ArrayList<Class>();
		methods=new ArrayList<String>();
		executeDates=new ArrayList<Date>();
	}
	//判断集合中的数据是否是一样多的
	private boolean equalsList(){
		if(clazzs!=null&&methods!=null&&executeDates!=null){
			
			if((clazzs.size()==methods.size())?(methods.size()==executeDates.size())?true:false:false){
				return true;
			}
		}
		
		return false;
	}
	
	private void addProp(Class clazz,String method,Date executeDate){
		
		if(clazz!=null&&method!=null&&executeDate!=null){
			clazzs.add(clazz);
			methods.add(method);
			executeDates.add(executeDate);
			
		}
	}
	
}

 

 StartTask.java

 

package cn.hk.test;
import java.text.ParseException;
import java.text.SimpleDateFormat;

public class StartTask {
	
	public static void main(String[] args) throws InterruptedException, ParseException {

     cn.hk.test.TimerTask timerTask=new cn.hk.test.TimerTask(StartTask.class,"show",format.parse("2012-7-11 10:30:01"));
		timerTask.start();
		timerTask=new cn.hk.test.TimerTask(StartTask.class,"show",format.parse("2012-7-11 10:30:04"));
		timerTask.start();
  
     }
  public void show(){;}
}
 

 

C++11并发与多线程笔记(2) 线程启动、结束,创建线程多法、join,detach 第二节 线程启动、结束,创建线程多法、join,detach 一、范例演示线程运行的开始 程序运行起来,生成一个进程,该进程所属的主线程开始自动运行;当主线程从main()函数返回,则整个进程执行完毕 主线程从main()开始执行,那么我们自己创建的线程,也需要从一个函数开始运行(初始函数),一旦这个函数运行完毕,线程也结束运行 整个进程是否执行完毕的标志是:主线程是否执行完,如果主线程执行完毕了,就代表整个进程执行完毕了,此时如果其他子线程还没有执行完,也会被强行终止【此条有例外,以后会解释】 创建 阅读详情

相关推荐

8.23拼多多笔试真题-护栏补强(C++/Py/Java /Js/Go)

拼多多笔试 8月23号真题,拼多多笔试第二题【护栏补强】,提供详细思路讲解以及Java、C++、Python、Go、JavaScript多语言代码实现。拼多多技术岗笔试真题【护栏补强】多语言题解。

qq_45776114的博客 224

java中使用quartz_quartz在普通Java中的使用

由于本次程序最终支出打包成exe的方式,而配置类的文件需要支持手工修改,所以第一该配置文件存储的文件夹目录与src目录同级,并非常规的在src目录下;第二读取的配置文件目录同样支持中文特殊字符等路径规则;后文中的代码同样基于这种规则编quartz.properties该文件描述了调度工厂实例、线程数、任务文件等,参考代码如下:#================================...

weixin_42114645的博客 799

S7-400PLC及模块CAD图(全)(.dxf)

S7-400PLC及模块CAD图(全)(.dxf)CAD可以打开

Quartz 基本概念及原理

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34357928的博客 1119

quartzspring结合后的使用,模仿

没有真正理解内核,只是模仿使用。 用来定时检验是否为工作日。 applicationContext.xml <? xml version="1.0" encoding="UTF-8" ?> < beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="...

weixin_30483495的博客 88

Java实习模拟面试之任务调度技术方案:从Timer到Quartz再到分布式调度

好的,面试官。每天0点执行数据备份和报表生成。每5分钟检查一次待处理的工单。用户下单后30分钟未支付,自动取消订单。Java原生API和。Spring生态:基于注解的@Scheduled,简化了定时任务的开发。专业调度框架Quartz,用于管理复杂调度场景和持久化任务。简单任务用Spring@Scheduled,复杂任务用Quartz。比如,像“每5分钟检查工单”这种简单周期性任务,我们直接用就能搞定。

吾为热爱计科,致力于知识分享的践行者,此博客是我在这条道路上留下的足迹。 387

python判断是否为整数的函数_实现函数 isInteger(x) 来判断 x 是否是整数

Python开发程序:选课系统-改良版程序名称: 选课系统 角色:学校.学员.课程.讲师要求:1. 创建北京.上海 2 所学校2. 创建linux , python , go 3个课程 , linux\py 在北京开, go 在上海开3. ...数据结构《14》----并查集 Union-Find描述: 并查集是一种描述解决等价关系.能够方便地描述不相交的多个集合. 支持如下操作 1. 建立...

weixin_39837207的博客 2035

定时任务之Quartz

Quartz 的设计核心在于将“做什么(Job)”与“何时做(Trigger)”解耦,并通过“调度器(Scheduler)”进行管理。注意:使用数据库模式前,需确保数据库中已存在 Quartz 所需的 11 张表(如。如果不配置任何 Quartz 属性,Spring Boot 默认使用内存存储。在实际生产中,往往需要通过接口动态添加、修改或删除任务。starter,极大地简化了配置过程。场景 A:内存模式(默认,无需额外配置)Spring Boot 提供了。场景 B:数据库持久化与集群模式。

Listen·Rain的博客 1528

Java+Spring 实现任务调度Quartz框架(纯Java实现+Spring实现) 读Excel

任务调度概述 在企业级应用中,经常会制定一些“计划任务” 即在某个时间点做某件事情 核心是以时间为关注点,即在一个特定的时间点,系统执行指定的一个操作 任务调度涉及多线程并发、线程池维护、运行时间规则解析、运行现场的保护以恢复等方面 Quartz框架是一个开源的企业级任务调度服务,已经被作为任务调度的良好解决方案 Quartz 中译: 石英,水晶; 现在常用于钟表的意思… Quartz框架核心概念 Quartz对任务调度进行了高度抽象,提出了3个核心概念: 任务: 就是执行的工作内容。Quartz

Java.慈祥 1281

Quartz-Spring集成Quartz通过XML配置的方式

概述 Maven依赖 步骤 创建JobDteail 创建Trigger 创建Scheduler 示例-MethodInvokingJobDetailFactoryBean 示例-JobDetailFactoryBean 示例源码概述Spring为创建Quartzde Scheduler、Trigger和JobDetail提供了方便的FactoryBean类,以便能够在Spring容器中享受注入的好处

小工匠 3万+

JavaSpring使用Quartz任务调度定时器

Quartz 任务调度是什么 Quartz 是 OpenSymphony 开源组织在 Job scheduling 领域又一个开源项目,它可以与 J2EE 与 J2SE 应用程序相结合也可以单独使用。Quartz 是一个完全由 Java的开源作业调度框架。不要让作业调度这个术语吓着你。尽管Quartz框架整合了许多额外功能,但就其简易形式看,你会发现它易用得简直让人受不了! 摘自

shengfakun1234的专栏 336

spring+quartz详解

1. 首先用一个纯quartz例子讲一下quartz的基本概念 其中有两个基本概念,job(封装业务)与trigger(任务调度),trigger又分两种,simpleTrigger与cronTrigger,分别模拟了window下的schedule task与linux下的cron table,详见本文最末  以一个maven project为例,在pom.xml中要引入quart...

weixin_30568715的博客 225

Linux服务器RocketMQ和RocketMQ Dashboard安装部署

rockermq安装

qq_39984729的博客 216

大数据 之 Snappy

【代码】大数据 之 Snappy。

zhixingheyi_tian的博客 165

商超智能运营如何落地?从系统架构到实战避坑的完整技术路径

3. **多端交互展示层**:需覆盖顾客使用的**小程序、APP及H5公众号**,以及员工使用的管理后台。答:在应用层引入**适配器模式**。在项目启动时,应强制要求供应商或自研团队产出**部署文档**(含环境变量清单)和**二次开发文档**(含核心流程时序图),确保后续维护不受限于个人。- **多租户插件**:MyBatis Plus的`TenantLineInnerInterceptor`可实现SQL层面的自动拼接`store_id`条件,防止开发者因SQL编疏漏导致的数据越权。

weixin_56812938的博客 366

【手搓 Agent 第2.3关】搭建 Agent 进阶能力:工具注册中心架构重构

本篇优化了之前编 Agent 时的杂乱硬编码,使用工具注册中心统一调度,促使后期增添工具更加容易。顺便优化了 RAG 知识库的懒加载,使 Agent 启动更快。

2502_92964924的博客 325

Java深入解析篇二十之JavaStream API详解

Stream(流)是引入的数据处理抽象,位于包。它表示从数据源产生的元素序列,并支持对其进行函数式、聚合式操作。不是集合:流不存储数据,只描述对数据的计算;不是 IO 流:与无关;惰性管道:中间操作只是登记,终端操作才触发实际计算。// 命令式法(对照) // List<String> r = new ArrayList<>();

萧瑟余晖的博客 342

电商推返模式的技术架构与系统落地实践

成功的电商推返模式系统,本质是。

weixin_42804741的博客 172

深度解析:一个 Java 对象究竟占用多少字节?

System.out.println("========== 空对象 EmptyObj 内存布局 ==========");System.out.println("========== 基础类型对象 User 内存布局 ==========");System.out.println("========== 含引用对象 Order 内存布局 ==========");对象头12字节 + long(8B) + 引用(4B) = 24B,刚好是8的整数倍,无对齐填充,完美匹配计算规则。

这就是程序猿的博客 358
上一篇: Timer的schedule和scheduleAtFixedRate方法的区别解析(转载)
下一篇: jquery获取textarea所输入的行数
tempdowncomputer
博客等级 码龄16年 2粉丝 405原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值