scheduleAtFixedRate 和schedule

scheduleAtFixedRate 和schedule最近整了一个 TimerTask 要求每天定点执行某一任务 code java importjava util Calendar importjava util Date importjava util Timer importjava util TimerTask importjavax servlet ServletConte imp

最近整了一个TimerTask 要求每天定点执行某一任务.


import java.util.Calendar;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

import org.apache.log4j.Logger;

public class DoLogListener implements ServletContextListener {
Timer t = null;

public void contextInitialized(ServletContextEvent sce) {
Calendar c = null;
c = Calendar.getInstance();
c.set(Calendar.HOUR_OF_DAY, 00);
c.set(Calendar.MINUTE, 01);
c.set(Calendar.SECOND, 00);
Date date = c.getTime();
t = new Timer();
t.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
doSomething();
}
}, date, 24 * 60 * 60 * 1000);
//t.schedule(new TimerTask() {
// @Override
// public void run() {
// doSomething();
// }
//}, date, 24 * 60 * 60 * 1000);

}

public void contextDestroyed(ServletContextEvent sce) {
t.cancel();

}

public void doSomething() {
System.out.println("sb")
}
}













































如果服务在当天00:01分以前被启动,两个方法都会在在00:01分时执行任务.
第二次任务执行时间都是00:01+24 * 60 * 60 * 1000,如果过了这个点后启服务两个方法都会马上执行任务.但第二次任务被执行的时间就是差别了,scheduleAtFixedRate是在你设置的date的基础上加24 * 60 * 60 * 1000这个时间段后执行而,schedule是在服务启动时间的基础上加24 * 60 * 60 * 1000这个时间段后执行.


public static void main(String[] args) {
Calendar c = Calendar.getInstance();
c.set(2009, 04, 20, 11, 50,00);
Date date = c.getTime();
Timer t = new Timer();
t.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
System.out.println("aaaaaaa");
}
}, date,2*60*1000);
}












如果你在11:55:00启动服务scheduleAtFixedRate在服务启动时任务就会被执行3次.
11:50:00 第一次
11:52:00 第二次
11:54:00 第三次
第四次的执行时间是:11:56:00
如果用schedule在服务启动时任务只会被执行1次11:50:00第二次执行的时间是11:57:00.











版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/233189.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 【2020】DBus,一个更能满足企业需求的大数据采集平台「建议收藏」

    【2020】DBus,一个更能满足企业需求的大数据采集平台「建议收藏」功能远超Sqoop、DataX、Flume、Logatash、Filebeat等采集工具深知其他组件的局限性,才能彰显DBus的优越感当前有很多数据采集工具(Sqoop、DataX、Flume、Logatash、Filebeat等),他们或多或少都存在一些局限性。一个共性问题是缺乏统一的数据源端管控,所以也就无法找到统一的数据入口,那后续处理元数据或者血缘分析会异…

    2022年5月27日
    35
  • 基于Html5的移动端APP开发框架「建议收藏」

    基于Html5的移动端APP开发框架「建议收藏」快速增长的APP应用软件市场,以及智能手机的普及,手机应用:Native(原生)APP快速占领了APP市场,成为了APP开发的主流,但其平台的不通用性,开发成本高,多版本开发等问题,一直困扰着专业APP开发企业,和APP服务提供商。安卓和IOS的操作方式,开发模式,界面UI显示方面的差别,也使得原生APP的不同版本体验有很大的区别,光是做兼容性调测,都要花费开发企业不少的时间。近年来,另一种

    2022年6月15日
    168
  • web实现QQ第三方登录[通俗易懂]

    web实现QQ第三方登录[通俗易懂]开放平台-web实现QQ第三方登录应用场景web应用通过QQ登录授权实现第三方登录。操作步骤1注册成为QQ互联平台开发者,http://connect.qq.com/2准备一个可访问的域名,

    2022年8月2日
    7
  • 【PyTorch】详解pytorch中nn模块的BatchNorm2d()函数

    【PyTorch】详解pytorch中nn模块的BatchNorm2d()函数基本原理在卷积神经网络的卷积层之后总会添加BatchNorm2d进行数据的归一化处理,这使得数据在进行Relu之前不会因为数据过大而导致网络性能的不稳定,BatchNorm2d()函数数学原理如下:BatchNorm2d()内部的参数如下:1.num_features:一般输…

    2022年6月14日
    57
  • 移动端开发模式

    移动端开发模式移动端开发模式现今流行的移动端开发模式共有三种:web(H5)Hybrid(混合开发)Native(原生)下面来剖析一下三种模式的优缺点:1.开发难度:无疑web和Hybrid难度要小于原生app开发,而且可以利用现有的Web开发工具和工作流程。2.移动设备本地API访问:Hybrid可以通过jsAPI访问移动设备的摄像头,GPS等。原生App可以通

    2022年6月24日
    34
  • ESP8266模块使用完整教程「建议收藏」

    在我入门ESP8266小黄板的过程中,过程是艰难的,因为网络上的资料太多太乱,官网上的资料不算太完备,而在技术交流群里面的就更乱了,所以想按自己学习所总结到的经验来分享给大家。资源链接:http://pan.baidu.com/s/1i4qjrY9请使用本教程之前先下载以上资源。前言:esp8266我用到的是小黄板测试板,而ESP8266主要有两种固件,一种是AT固件,一种是IOT固件。前者用串

    2022年4月18日
    228

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号