JAVA单机版程序,如何指定在每天凌晨0:00:00执行?

JAVA单机版程序,如何指定在每天凌晨0:00:00执行?,第1张

import javautilCalendar;
import javautilDate;
import javautilTimer;
import javaxservletServletContextEvent;
import javaxservletServletContextListener;
public class HandleTimerTask implements ServletContextListener {
private Timer timer = null; //定时器
private static int DOWNlOAD_HOUR = 0; //执行任务开始时间(时)
private static int DOWNlOAD_MINUTE = 0; //执行任务开始时间(分)
private static int DOWNlOAD_SECOND = 0; //执行任务开始时间(秒)
private long delay; //延时时间值(当前系统时间到下载时间之间的时间差毫秒数)

public void contextInitialized(ServletContextEvent event) {
init();//初始化参数
timer = new Timer(true);//创建Timer对象
//定时执行程序
timerschedule(new Handle(eventgetServletContext()),delay,2460601000);//调用Handle()类(即每天要执行的任务),delay表示延迟毫秒数,0,2460601000表示每隔一天执行一次任务,60601000表示一个小时;
}
public void contextDestroyed(ServletContextEvent event) {
timercancel();
}

/
初始化参数
@return
/
public void init(){
//声明一个Calendar对象
Calendar cal = CalendargetInstance();
//设置时间
calset(CalendarHOUR_OF_DAY, DOWNlOAD_HOUR);
calset(CalendarMINUTE, DOWNlOAD_MINUTE);
calset(CalendarSECOND, DOWNlOAD_SECOND);
Date date = new Date();
//获取设定的时间
date = calgetTime();
//声明当前时间
Date now = new Date();
//获取设定的时间和当前的时间差(毫秒数)
long interval = dategetTime() - nowgetTime();
//如果当前时间大于下载时间,则将下载时间设置为下一个下载时间
if (interval < 0) {
caladd(CalendarDAY_OF_MONTH, 1);//将天数加1
date = calgetTime();
//获取设定的时间和当前的时间差(毫秒数)
interval = dategetTime() - nowgetTime();
}
thisstartTime = date;//初始化开始下载时间
thisdelay = interval;//初始化当前时间到下载时间之间的时间差
}
}
public class Handle extends TimerTask {
private ServletContext context = null;
Timer timer = null; //查询任务定时器

public Handle(ServletContext context)
{
thiscontext = context;
}
/
开始执行
/
public void run() {
//开始执行
contextlog("开始执行!");
}
}
用延迟时间可以实现,添加了一个init()方法用来计算延时数,不管什么时候启动服务,都可以根据当前系统时间和执行任务的开始时间计算出延时时间毫秒数。
虽然没有分,还是希望能帮助你。 ^_^

java获取应用的运行时间,可以利用时间差来获得,使用SystemcurrentTimeMillis()该方法获得此时的时间,代码如下:

package comqiulinhe;
import javatextParseException;
public class Ceshi {
public static void main(String[] args) throws ParseException {
double begin = SystemcurrentTimeMillis(); // 程序开始时间,调用系统的当前时间
for (int i = 0; i < 10000; i++) {
// 这里执行具体的业务逻辑
Systemoutprintln(i);
}
// 你要运行的程序
double end = SystemcurrentTimeMillis(); // 程序结束时间,调用系统当前时间
double time = end - begin;// 程序的运行时间
Systemoutprintln(time / 60 + "秒");
}
}

运行结果如下:

第一种是以毫秒为单位计算的。

[java] view plain copy

//伪代码

long startTime=SystemcurrentTimeMillis();   //获取开始时间

doSomeThing();  //测试的代码段

long endTime=SystemcurrentTimeMillis(); //获取结束时间

Systemoutprintln("程序运行时间: "+(end-start)+"ms");

第二种是以纳秒为单位计算的。 

[java] view plain copy

//伪代码

long startTime=SystemnanoTime();   //获取开始时间

doSomeThing();  //测试的代码段

long endTime=SystemnanoTime(); //获取结束时间

Systemoutprintln("程序运行时间: "+(end-start)+"ns");

包含所需的包:  import javalangSystem;

LZ指的是定时任务吧
在java里面做定时任务通常是线程的
下面有个简单的定时任务(没验证是否好使 但基本是这个样子的)
在webxml里面增加一个监听
<listener>
<listener-class>CountListen</listener-class>
</listener>
具体代码如下
import javaxservletServletContextListener;
import javaxservletServletContextEvent;
import javautil;
public class CountListen
implements ServletContextListener {
private javautilTimer timer = null;
public void contextInitialized(ServletContextEvent event) {
timer = new javautilTimer(true);
eventgetServletContext()log("定时器已启动");
Systemoutprintln("定时器已启动");
Date date = new Date(1900,1,1,23,59);
timerschedule(new SampleTask(eventgetServletContext()),0,
24 60 60 1000);
eventgetServletContext()log("已经添加任务调度表");
Systemoutprintln("已经添加任务调度表");
}
public void contextDestroyed(ServletContextEvent event) {
timercancel();
eventgetServletContext()log("定时器销毁");
}
}
import javautil;
import javaxservletServletContext;
import comfoundergonganutilConfigPropertie;
import comfoundergonganmanageCountManager;
import comfounderbotongentityEnumFolder;
class SampleTask
extends TimerTask {
private static boolean isRunning = true;
private ServletContext context = null;
public SampleTask(ServletContext context) {
thiscontext = context;
}
public void run() {
if (isRunning) {
isRunning = false;
contextlog("开始执行指定任务");
Systemoutprintln("开始执行指定任务");
//指定的任务
isRunning = true;
contextlog("指定任务执行结束");
Systemoutprintln("指定任务执行结束");
}else {
contextlog("上一次任务执行还未结束");
}
}
}


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/13362728.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-07-22
下一篇 2023-07-22

发表评论

登录后才能评论

评论列表(0条)

保存