JAVA中的定时器

摘要:
使用起来很方便。Timer和timerTask都是java。util中提供的实用程序类可以用于javaweb项目和javase项目。IsRunning){IsRunning=true;log.info;//启动任务//添加您想要的log.info内容;//任务完成IsRunning=false;}否则{log.info;//上次任务执行尚未结束}}2。任务控制类publicclassTaskManageinitiationsServletContextListener{privatefinalLoggerlogger=Logger.getLogger;/**无延迟*/publicstaticfinallNO_delay=0;/***Timer*/privateTimer;/**在Web应用程序启动时初始化任务*/publicvoid contextInitialized{//定义计时器计时器=newTimer;Logger.info(“计时器初始化。。“);timer.cancel();//timer Destroy}3.quartz是OpenSymphony开源组织的一个开源项目,可用于javaweb项目和javase项目

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中的定时器》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇用python从redis的有序集合中一次性删除多个值boost之ThreadPool下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

iview中modal如何修改标题颜色

modal默认设置transfer属性为true,然后整个弹窗就在body的下一层,所以样式修改失败,直接设置为false就可以修改样式了修改标题颜色,当然设置transfer为false后也可以修改modal中的其他样式:.ivu-modal-header-inner{color:#ba9759;}...

VMP加壳(二):VMP的虚拟化原理

由于CPU只能识别和执行二进制文件,并直接让硬件CPU执行虚拟机的二进制代码,因此只能考虑通过纯软件模拟虚拟机执行代码指令。为了在软件级别模拟CPU执行二进制代码指令,一般的虚拟机指令要么是操作寄存器,虚拟机指令的处理程序必须模拟这些函数。它用于指示虚拟CPU当前执行的代码。为了满足上述要点,2。VMP虚拟机的执行过程(1)考虑启动VT。...

iTerm2 配色方案(转)

ITerm2配色方案(噢,我的zsh&amp;Powerline)item2.png转到官方网站下载ITerm2,并以全黑色背景打开它。屏幕截图2017-08-01下午5.45.28点。Pngsolarized可以说是目前网络上最流行的配色方案,我个人认为比较这种配色更好。第一种方法:打开iTerm2首选项、配置文件/颜色,然后直接选择Solariz...

安装qmake与环境变量解析

如果你已经有了qmake,可以跳过这里,请看10分钟学会使用qmake。手动安装qmake在手工连编Qt之前,下面这些环境变量必须被设置:QMAKESPEC这个必须设置为你所使用的系统的平台和编译器的组合。当编译完成时,qmake已经可以使用了。这里对添加环境变量时,是在path里头添加,还是new一个变量有点疑惑。而如果是new的话,当我们在为程序添加路径...

Google Drive 里的文件下载的方法

Google Drive不提供创建直接下载链接的选项,但您可以通过更改链接形式在本地保存共享内容。例如,通过Google Drive共享的文件链接是:https://drive.google.com/file/d/FILE_ID/edit?usp=sharing如果您将其更改为以下修改版本,然后通过浏览器打开,则将直接下载该文件:https://drive....

Linux下如何确认磁盘是否为SSD

方法1:通过cat/sys/block/sda/queue/rotative查看/sys/block/sda/queet/rotative,返回值0为SSD;返回1表示HDD。方法2:通过lsscsi[root@ssd-testthatsit]#cat/sys/bl...