java定时执行任务(一)

需求:

经常遇到这样的需求:要求每天执行一次任务,执行任务时间是凌晨3点

实现:

为了便于检测,我假设的是下一分钟执行任务,每10秒重复执行。(对应现实项目:每天3点执行任务。那么就是下一个3点执行任务,并每次sleep24小时)

TimerManager.java

package cn.test.test;

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

public class TimerManager {
	//定义时间间隔  根据具体情况定 我假设每10s执行一次
    private static final long PERIOD_DAY = 10 * 1000;
    public TimerManager() {
         Calendar calendar = Calendar.getInstance();   

         /*** 定制下一分钟执行方法 ***/  

         calendar.set(Calendar.HOUR_OF_DAY, 3);
         calendar.set(Calendar.MINUTE, 0);
         calendar.set(Calendar.SECOND, 0);  

         Date date=calendar.getTime(); //第一次执行定时任务的时间
         System.out.println(date);
         System.out.println("before 方法比较:"+date.before(new Date()));
         //如果第一次执行定时任务的时间 小于 当前的时间
         //此时要在 第一次执行定时任务的时间 加一天,以便此任务在下个时间点执行。如果不加一天,任务会立即执行。循环执行的周期则以当前时间为准
         if (date.before(new Date())) {
             date = this.addDay(date, 1);
             System.out.println(date);
         }  

         Timer timer = new Timer();  

         LyzTimerTask task = new LyzTimerTask();
         //安排指定的任务在指定的时间开始进行重复的固定延迟执行。
         timer.schedule(task,date,PERIOD_DAY);
        }  

        // 增加或减少天数
        public Date addDay(Date date, int num) {
         Calendar startDT = Calendar.getInstance();
         startDT.setTime(date);
         startDT.add(Calendar.DAY_OF_MONTH, num);
         return startDT.getTime();
        }

        public static void main(String[] args) {
			new TimerManager();
		}
}

LyzTimerTask.java

package cn.test.test;

import java.text.SimpleDateFormat;
import java.util.TimerTask;

public class LyzTimerTask extends TimerTask{
	private static SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
	timePrint time = new timePrint();
	@Override
	public void run() {
		// TODO Auto-generated method stub
		try {
			time.nowTime();
		} catch (Exception e) {
			System.out.println("定时分析错误");
		}
	}

}

timePrint.java

package cn.test.test;

import java.text.SimpleDateFormat;
import java.util.Calendar;

public class timePrint {
	private static SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
	public static void nowTime(){
		System.out.println("执行当前时间"+formatter.format(Calendar.getInstance().getTime()));
	}
}

上述程序我们就可以实现定时执行timePrint中的nowTime函数。

为了更完美测试,我写了另外一个主函数,在上述程序的线程自动调用timePrint自动执行时,我用新的主函数访问执行timePrint,结果是可以同步并不会报错。

package cn.test.test;

public class testTimer {
	public static void main(String[] args) {
		timePrint time = new timePrint();
		time.nowTime();
	}
}
时间: 2024-07-31 08:53:13

java定时执行任务(一)的相关文章

JAVA定时执行任务,每天定时几点钟执行任务

JAVA定时执行任务,每天定时几点钟执行任务的示例如下: 1.建立TimerManage类,设置时间点,时间点设置的管理类,代码如下: 1 package com.pcitc.time; 2 3 import java.util.Calendar; 4 import java.util.Date; 5 import java.util.Timer; 6 7 public class TimerManager { 8 9 //时间间隔 10 private static final long PE

java定时执行任务

1:listner加载Timer,定时执行任务 2:定时任务类

linux下crontab定时执行java程序,java程序不执行的问题

crontab的语法 在以上各个字段中,还可以使用以下特殊字符: 星号(*):代表所有可能的值,例如month字段如果是星号,则表示在满足其它字段的制约条件后每月都执行该命令操作. 逗号(,):可以用逗号隔开的值指定一个列表范围,例如,"1,2,5,7,8,9" 中杠(-):可以用整数之间的中杠表示一个整数范围,例如"2-6"表示"2,3,4,5,6" 正斜线(/):可以用正斜线指定时间的间隔频率,例如"0-23/2"表示每两

【Java】利用Timer与TimerTask定时执行任务

在Java里面定时执行一条任务多用于线程与进程配合Thread.currentThread().sleep(XXX);来实现,但是一些小型的任务其实完全利用Timer与TimerTask定时执行,Timer与TimerTask组合跟Thread与Runnable的区别在于,Timer与TimerTask是纯粹的单线程定时执行任务的计时器,相当于Thread与Runnable配合Thread.currentThread().sleep(XXX);的特殊情况,但程序写法定时器没有线程那么复杂.Thr

Java 在某一个时间点定时执行任务(转载)

java定时任务,每天定时执行任务.以下是这个例子的全部代码. public class TimerManager { //时间间隔 private static final long PERIOD_DAY = 24 * 60 * 60 * 1000; public TimerManager() { Calendar calendar = Calendar.getInstance(); /*** 定制每日2:00执行方法 ***/ calendar.set(Calendar.HOUR_OF_DA

java定时任务,每天定时执行任务

java定时任务,每天定时执行任务. public class TimerManager { //时间间隔 private static final long PERIOD_DAY = 24 * 60 * 60 * 1000; public TimerManager() { Calendar calendar = Calendar.getInstance(); /*** 定制每日2:00执行方法 ***/ calendar.set(Calendar.HOUR_OF_DAY, 2); calend

java web每天定时执行任务

第一步: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 package com.eh.util; import java.util.Calendar; import java.util.Date; import java.util.Timer; /**  * java定时任务

Java实现每天定时执行任务

1.TimerManager类 package com.lyz.util; import java.util.Calendar; import java.util.Date; import java.util.Timer; /** * java定时任务,每天定时执行任务 * @author liuyazhuang * */ public class TimerManager { //时间间隔 private static final long PERIOD_DAY = 24 * 60 * 60

用Quartz处理定时执行的任务

这次做的项目中,有一部分功能需要实现定时执行.呃,这样说可能有点笼统,打个比方吧.例如用户在登录的时候,连续输错3次密码后,系统会将该用户冻结,不再允许该用户登录系统,等到了晚上零晨时分,再为所有被冻结的用户解冻,这样,用户在第二天又可以正常登录系统了.这样做是为了用户帐号安全,可有效防止暴力破解密码...呃,好像跑题了,咱还是回到正题来.在这里我们只关心怎么能实现每天晚上零晨准时执行为用户解冻的程序. 第一时间,我想到了JDK自带的Timer和TimerTask类,可经过测试,要想做到精准的定