java销毁定时器_JAVA中的定时器
1.自己写while(true)死循环,来判断是否到达执行时间条件
这种实现定时任务的方式,完全是自己写代码实现,放在第一个介绍,是因为它最灵活,完全由自己控制,但是缺点是,只适合小工具类的程序,任务单一固定的程序。
实现的简单代码块如下:
long interval = 100; // 秒
String runTime = "12:50";
Date startTime = new Date();
boolean runFlag = false;
int count = 0;
while(true){
Date nowTime = new Date();
if (!StringUtils.isEmpty(runTime)) {
String checkTime = DateUtilsExt.getNowTime("HH:mm");
if (runTime.equals(checkTime)) {
runFlag = true;
}
} else if (intervalTime > 0) {
long now = nowTime.getTime();
long start = startTime.getTime();
long interval = (now - start)/1000;
//第一次执行
if (count == 0) {
runFlag = true;
//间隔时间执行 运行间隔到了指定秒以后执行
} else if (intervalTime <= interval){
runFlag = true;
}
}
if (runFlag) {
// 执行定时任务
}
}
2.java自带的工具类 timer + timerTask
这个方式是我们本次导数工具所用的程序。用着挺方便,timer ,timerTask 都是java.util中提供的工具类,既可以用于java web项目,也可以用于javase项目。实,现代码如下
1.具体任务类
public class DateImportTask extends TimerTask {
private static Logger log = Logger.getLogger(DateImportTask.class);
private static boolean isRunning = false;
private SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
private SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
public void run() {
if (!isRunning) {
isRunning = true;
log.info("开始执行任务..."); //开始任务
//working add what you want to do
log.info("执行任务完成..."); //任务完成
isRunning = false;
} else {
log.info("上一次任务执行还未结束..."); //上一次任务执行还未结束
}
}
}
2.任务控制类
public class TaskManager implements ServletContextListener {
private final Logger logger = Logger.getLogger(TaskManager.class);
/**
* 无延迟
*/
public static final long NO_DELAY = 0;
/**
* 定时器
*/
private Timer timer;
/**
* 在Web应用启动时初始化任务
*/
public void contextInitialized(ServletContextEvent event) {
//定义定时器
timer = new Timer("数据导入任务",true);
logger.info("定时器初始化。。。");
//启动备份任务,每 执行一次
// timer.schedule(new DateImportTask(),NO_DELAY, DateUtils.MILLIS_PER_SECOND * 1);
// 设置指定时间点启动任务
String startHour = event.getServletContext().getInitParameter("startHour");
String startMinute = event.getServletContext().getInitParameter("startMinute");
int hour = 14;
if (StringUtils.isNotBlank(startHour)){
hour = Integer.parseInt(startHour);
}
int minute = 14;
if (StringUtils.isNotBlank(startMinute)){
minute = Integer.parseInt(startMinute);
}
Calendar c = Calendar.getInstance();
c.set(Calendar.HOUR_OF_DAY,hour);
c.set(Calendar.MINUTE,minute);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
logger.info("设置的启动时间为:"+sdf.format(c.getTime()));
timer.schedule(new DateImportTask(), c.getTime() , DateUtils.MILLIS_PER_DAY * 1);
}
/**
* 在Web应用结束时停止任务
*/
public void contextDestroyed(ServletContextEvent event) {
logger.info("定时器销毁。。。");
timer.cancel(); // 定时器销毁
}
}
3.quartz
Quartz是OpenSymphony开源组织的开源项目,既可以用于java web项目,也可以用于javase项目
java销毁定时器_JAVA中的定时器相关推荐
- java mod %区别_Java中 % 与Math.floorMod() 区别详解
%为取余(rem),Math.floorMod()为取模(mod) 取余取模有什么区别呢? 对于整型数a,b来说,取模运算或者取余运算的方法都是: 1.求 整数商: c = a/b; 2.计算模或者余 ...
- java show过时_Java中show() 方法被那个方法代替了? java编程 显示类中信
你说的show是swing里的吧,在老版本中Component这个超类确实有show这个方法,而且这个方法也相当有用,使一个窗口可见,并放到最前面.在jdk5.0中阻止了这个方法,普遍用setVisi ...
- java判断类型_Java中类型判断的几种方式 - 码农小胖哥 - 博客园
1. 前言 在Java这种强类型语言中类型转换.类型判断是经常遇到的.今天就细数一下Java中类型判断的方法方式. 2. instanceof instanceof是Java的一个运算符,用来判断一个 ...
- java 序列化实例_Java中的序列化与反序列化实例
创建的字节流与平台无关.因此,在一个平台上序列化的对象可以在另一个平台上反序列化. 为了使Java对象可序列化,我们实现java.io.Serializable可序列化接口. ObjectOutput ...
- java 数据类型分为_JAVA中分为基本数据类型及引用数据类型
byte:Java中最小的数据类型,在内存中占8位(bit),即1个字节,取值范围-128~127,默认值0 short:短整型,在内存中占16位,即2个字节,取值范围-32768~32717,默认值 ...
- java 代码锁_Java中的Lock锁
Lock锁介绍: 在java中可以使用 synchronized 来实现多线程下对象的同步访问,为了获得更加灵活使用场景.高效的性能,java还提供了Lock接口及其实现类ReentrantLock和 ...
- java wait 参数_java中wait()和join()方法的区别是什么
java中wait()和join()方法的区别是:存在不同的java包中:wait()方法用于线程间通信,它所施加的等待状态的线程可以被启动:join()方法用于在多个线程之间添加排序,它所施加的等待 ...
- java thread join()_Java中Thread.join()的使用方法
概要 本文分三个部分对thread.join()进行分析: 1. join() 的示例和作用 2. join() 源码分析 3. 对网上其他分析 join() 的文章提出疑问 1. join() 的示 ...
- java 锁定界面_Java中的锁
java中的锁遵循不同的分类方法,太多了,乐观锁/悲观锁,可重入锁/不可重入锁,有些第一遇到的话,可能还有点懵.刚好周末有时间学习下,总结和梳理下. 一总述 总的来说对java的锁有以下七种分类方法: ...
最新文章
- 蓝桥杯-安慰奶牛(java)
- 遥控开关,4G远程控制增氧机,智慧农渔更轻松!
- linux设置切换窗口特效,Linux_在Ubuntu下启用亮丽的透明玻璃窗口特效,本文将采用图文并茂的形式向 - phpStudy...
- python与线性代数 矩阵
- 记录——《C Primer Plus (第五版)》第七章编程练习第九题
- pdf转swf linux,Linux环境安装配置Swftools,pdf转swf工具
- 虚拟环境中用Anaconda安装显卡CUDA驱动与CUDA运行版本匹配
- 调出cmd输入时的光标
- 未来十大最热门职业,可能消失的职业
- 做人的十三条黄金玉律
- 如何在Qt中使用zlib
- 关于定位一直在香港的解决方式
- 常见计算机主机内部硬件设备,计算机的硬件主要包括中央处理器、储存器、输出设备和...
- 使用3ds Max2022来制作简单的动漫头像
- 【电子器件笔记3】电容参数和选型
- Java NIO与IO比较总结
- 本地登录切断远程连接的简单方法
- 利用FFmpeg玩转Android视频录制与压缩
- Navicat For Mysql破解
- 【文献分享】将生态系统服务和景观连通性整合到生态安全格局优化中——以中国珠江三角洲为例