Java可以应用于生活很多场景,很多业务需求的实现都离不开定时任务,例如备忘录提醒、闹钟等功能。那么java怎么做定时任务?下面我们就来给大家讲解一下这方面的内容。
首先介绍一种软件开发者经常会用的定时任务实现方式。即利用Thread类的sleep方法来实现定时任务。此方法非常容易理解,通过实现Java线程,然后调用sleep方法,让线程停止一段时候后,再接着执行,已达到实现定时任务的目的。以下是编写的测试代码。仅供参考!
代码中呢,就是实现了Runnable接口。run方法中,先打印一个当前系统时间,然后呢,接着执行sleep方法,休眠30秒。从而达到,每隔30秒执行一次打印任务的目的。当然,这个任务可以改为你实际需要执行的任务。比如,执行数据库备份等等。下面,我们将执行以下代码,看一下效果!
上面这种方法呢,是比较基础的实现方法。本身也存在一定弊端。一方面呢,定时任务执行不是很灵活,比如说,你想让他指定一段时候后再执行,不是很好实现。另一方面呢,线程是系统非常宝贵的资源。通过挂起线程来达到实现定时任务的目的,是对系统资源的一种浪费。特别是需要执行的定时任务比较多的时候。这样呢,我们可以提到另一种实现方式。可以利用jdk自带的定时器,Timer来实现。下面是利用Timer实现的一段代码。
上面代码,分别放在两个类中。第一个类为主类,通过Timer来执行TimerTask任务。第二个类为通过实现TimerTask类来编写具体的任务。此中的任务,也是打印了一个系统时间信息。通过Timer来做这个事情的话,可以指定一个延时时间,即可以指定一段时间后执行。并且线程不再被挂起,执行完后释放。下面,可以看一下执行结果。
是否Timer就是非常完美呢?其实,不然。Timer是对系统时间敏感的定时器,若修改时间,就会出现许多问题。不妨,我们做一个测试,先启动Timer,然后将系统时间调快7分钟。看会出现什么情况?我们会发现,定时器同一时间内连续执行了14次任务(7*60/30=14)。若将时间调慢,还会出现定时任务被挂起的情况。系统时间修改会导致定时器某时间段内的失效。
此时,我们可以引入第三种定时任务执行方式了!通过线程池的scheduleAtFixedRate方法来实现。下面就是实现的代码!
此种方法是一种更加好的实现方式。一方面,此种实现方式继承了Timer的灵活性。另一方面,此种方式方式,对系统时间不再敏感,修改系统时间后,它仍然是按照定时时间来执行。下面,我们仍然将系统时间调快7分钟,看一下测试结果。会发现修改系统时间后,对定时任务不再有影响。
怎么样?是不是觉得很神奇!只要按照上边的方法来操作就可以做java定时功能了哦,因此大家知道java的广泛应用了吧,所以一定要好好学习java!最后大家如果想要了解更多java实例知识,敬请关注奇Q工具网。
推荐阅读: