Java 定时器的使用示例

网友投稿 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 list = bankWorkService.findList(new BankWork().setStatus(Const.DEFAULT_STATUS));

//筛选出超过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小时内删除侵权内容。

上一篇:记一次springboot服务凌晨无故宕机问题的解决
下一篇:Java获取文件路径常用方法解析
相关文章

 发表评论

暂时没有评论,来抢沙发吧~