java的定时器是什么_java定时器timer是什么?该如何实现?

小伙伴们知道java定时器timer吗?本篇文章小编就来带大家了解一下它的概念及实现方法。

通俗的说,我们可以将Timer当成是一种工具,线程会用它安排以后在后台线程中执行的任务。嫩够安排任务执行一次或定期重复执行。但实际上它就是个线程,只是定时调度所拥有的TimerTasks而已。

TimerTask具体来说就是一个抽象类,它的子类会由 Timer

安排一次执行或重复执行的任务。实际上就是一个拥有run方法的类,只是将需要定时执行的代码放到run方法体内。

实现private Set  unitTimeSet = new HashSet  (24); //每天更新整点数,把已经检查的时间记录下来

public void checkDeviceDeopped()

{

Calendar calendar = Calendar.getInstance();

//此时要在 第一次执行定时任务的时间加一小时,以便此任务在下个时间点执行。

calendar.add(Calendar.HOUR_OF_DAY, 1);

calendar.set(Calendar.MINUTE, 0);

calendar.set(Calendar.SECOND, 0);

java.util.Date date = calendar.getTime(); //第一次执行定时任务的时间

Timer timer = new Timer(true);

timer.schedule(new TimerTask()

{

public void run()

{

Calendar cal = Calendar.getInstance();

int hour = cal.get(Calendar.HOUR_OF_DAY);

if (hour == 0)

{

unitTimeSet.clear();

}

if (hour % unitTime == 0 && !unitTimeSet.contains(hour))

{

Session session = sessionFactory.openSession();

cal.set(Calendar.MINUTE, 0);

cal.set(Calendar.SECOND, 0);

java.util.Date endTime = cal.getTime();

cal.add(Calendar.HOUR_OF_DAY, -1);

java.util.Date startTime = cal.getTime();

for (String deviceId: mapNvr.keySet())

{

//查询设备在指定时间内的掉线次数

Integer offLineNum = 0;

try

{

offLineNum = (Integer) session.createQuery("SELECT COUNT(*) FROM SystemLog WHERE workerid= :deviceId AND dt<= :endTime AND dt>= :startTime ")

.setParameter("deviceId", deviceId)

.setParameter("endTime", endTime, TemporalType.TIMESTAMP)

.setParameter("startTime", startTime, TemporalType.TIMESTAMP)

.uniqueResult();

}

catch (Exception e)

{

e.printStackTrace();

}

if (offLineNum >= 10)

{

//发送邮件

try

{

CompletableFuture.runAsync(() - >

{

sendMail("NUM", deviceId);

});

}

catch (Exception e)

{

e.printStackTrace();

}

}

}

}

unitTimeSet.add(hour);

}

}, date, 60 * 60 * 1000);

}

以上就是本篇文章的所有内容,更多有关java基础的详细知识可以关注我们来了解详情。

推荐阅读:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值