Flask接口签名sign原理与实例代码浅析
287
2022-11-21
Java 定时器的使用示例
最近要用到定时任务,就是超过48小时的数据给关闭,前台就不显示了。还是头一次使用java的定时器,。。java定时器使用Timer类。有时间得看下源码了,看看具体咋弄的。
Timer主要用于Java线程里指定时间或周期运行任务。Timer是线程安全的,但不提供实时性(real-time)保证。先看看调用timer的几种方式。
/**
* 这个方法是调度一个task,经过2000(ms)后开始进行调度,仅仅调度一次。
*/
public static void timer1(){
Timer nTimer = new Timer();
nTimer.schedule(new TimerTask() {
@Override
public void run() {
System.out.println("----设定要指定任务-----");
}
},2000);
}
/**
* 在指定的时间点time上调度一次。
*/
public static void timer2() {
Timer timer = new Timer();
timer.schedule(new TimerTask() {
public void run() {
System.out.println("-------延迟5000毫秒,每1000毫秒执行一次--------");
}
}, time);
}
/**
* 延迟5000毫秒,每1000毫秒执行一次
* 在5000(ms)后开始调度,每次调度完后,最少等待1000(ms)后才开始调度。
*/
public static void timer3() {
Timer timer = new Timer();
timer.scheduleAtFixedRate(new TimerTask() {
public void run() {
System.err.println("-------延迟5000毫秒,每1000毫秒执行一次--------");
}
}, 5000, 1000);
}
/**
* 设置17:56执行任务(第一次调度的时间),每过一天执行一次
* java.util.Timer.scheduleAtFixedRate(TimerTask task, Date firstTime, long period)
*/
public static void timer4() {
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, 17);
calendar.set(Calendar.MINUTE, 26);
calendar.set(Calendar.SECOND, 0);
Date time = calendar.getTime();
Timer timer = new Timer();
timer.scheduleAtFixedRate(new TimerTask() {
public void run() {
System.out.println("-------设定要指定任务--------");
}
}, time, 1000 * 60 * 60 * 24);// 这里设定将延时每天固定执行
}
以上就是调用的几种方法,再贴下我的代码
// 时间间隔(一天)
long periodDay = 24 * 60 * 60 * 1000;
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, 1); // 凌晨1点
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
Date date = calendar.getTime(); // 第一次执行定时任务的时间
// 如果第一次执行定时任务的时间 小于当前的时间
// 此时要在 第一次执行定时任务的时间加一天,以便此任务在下个时间点执行。如果不加一天,任务会立即执行。
if (date.before(new Date())) {
date = this.addDay(date, 1);
}
new Timer().scheduleAtFixedRate(new TimerTask() {
public void run() {
Date now = new Date();
//查出所有未关闭数据
List
//筛选出超过48小时的未关闭数据
list = list.stream().filter(e -> {
try {
return judgmentDate(e.getModifiedTime(), now);
} catch (Exception e1) {
e1.printStackTrace();
}
return false;
}).collect(Collectors.toList());
list.forEach(e -> e.setStatus(Const.BANK_WORK_STATUS_OK).setModifiedTime(now));
//修改所有未关闭数据为关闭
bankWorkService.updateAsGroup(list);
}
}, date, periodDay);
// 判断时间是否超过48小时
private static boolean judgmentDate(Date date1, Date date2) throws Exception {
long cha = date2.getTime() - date1.getTime();
if (cha < 0) {
return false;
}
double result = cha * 1.0 / (1000 * 60 * 60);
if (result <= 48) {
return true;
} else {
return false;
}
}
// 增加或减少天数
private Date addDay(Date date, int num) {
Calendar startDT = Calendar.getInstance();
startDT.setTime(date);
startDT.add(Calendar.DAY_OF_MONTH, num);
return startDT.getTime();
}
以上就是Java 定时器的使用示例的详细内容,更多关于Java 定时器的资料请关注我们其它相关文章!
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~