00:00
那么接下来咱们就来看一看这个定时器,那么需要打开我们的JDK的帮助文档,找一找Java的utility这个包啊U,那么U这个包呢,我们打开来看一看这个地方有没有叫做timer的,以T开始的叫timer,你看。是不是啊,有这么一个叫做定时器的一个东西。你看它的负类是谁呀?是object开码是不是?哎,怎么创建个定时器呢?你记住这个无参数构造方法就行了,通过这个无参数构造方法就可以创建一个定时器对象。啊,或者叫计时器对象啊,有了这个对象之后呢,接下来再往下呢,你有有这么一个方法,大家看啊,叫schedule schedule啊schedule。这个单词什么意思呢?来。叫只有。来指指定什么呀,定时任务的一个一个方法啊,我们来看它翻译成什么什么意思啊。来。
01:03
工作计划,日程安排是不是?为什么什么安排时间对不对?哎,为什么安排时间,这就是刚才指定定时任务。时间表啊,日历。那么这个单词呢,就是为为什么呀,为什么什么进行安排,就是其实就是指定一个定时任务。这个方法呢,它需要三个参数,大家看第一个参数是什么呢?是一个定时定时任务类类型,看见了吗?第二个参数是first time first time指的是我们第一次的这个任务。它的执行时间。啊,你可以在第二个参数上指定一下这个定时任务的第一次执行时间。然后第三个参数呢,是什么呢?是延迟多久执行一次,你可以在这里呢,指定什么延迟的时间间隔多久。对吧,你可以调用这个方法啊,叫schedule这个方法schedule啊,我们看一看这个大家能理解。
02:09
因为这是first time,这个呢,我们自然会怎么着啊,哎,会根据我们之前所学的方式去整一个时间出来放到这。那么这个参数呢,它是一个毫秒,毫秒参数就是间隔多久,间隔一秒你就写1000,间隔两秒你就写2000,对吧,你可以写一天,也可以写一年,没有任何问题啊,没有任何问题可以写对吧?啊,都可以写,你只要设置它的毫秒数就可以了,那么最关键的问题是这个方法,它有一个参数是第一个参数叫timer task叫定时任务,我们点过去。这个定时任务啊叫timer task,我们来看一下啊,大家看呢,它实现了一个接口叫roundable是不是。有意思了。对不对?哎,Roundable大家看,其实我们也可以理解成timer task是一个线程对不对。它相当于是个县城,对吧,同学们。
03:01
是不是因为它实现了round?对吧。你看大家看这个定时器能不能设置成后台线程。其实定时器它是个线程,你可以这样理解。我们可以理解成定时器timer,它是个线程。那一种工具线程,用其安排以后在后台线程中执行的任务。可安排任务执行一次或者定期执行什么重复定期重复执行是不是与每个timer对象相对应的是单个的后台线程?对吧,哎,其实它是个县城。这个timer呢,里边按钮的时候,你可以指定它是个后台的线程,你看创建一个新的计时器,可以指定其相关的线程作为守护程序运行。你看,你还可以创建一个计时器,并且给这个计时器起一个名字,你还可以给这个计时器起一个名字,同时设置这个计时器为后台线程,你看。
04:05
Demon吗?这个单词很眼熟吧,是不是我们刚才上上面这个讲讲的一个守护线程啊,对吧?哎,守护线程就你可以让这个定时器以守护的形式存在。对吧,哎,以这个守护的形式存在也是可以的啊,也是可以的,没有任何问题啊,啊,我们知道这个就行啊,无参构造创建出来,来给他委派任务,三个参数给他写上去,这样的话我们就指定了定时任务,来我们一起演演示一下啊,看这个怎么用好吧。来,这是最根本的啊,我说以后可能代码大家不会写这个代码啊,但是要注意我们以后用spring task,它底层就是用的它啊来。学一学原理,在这呢,我们去新建一个class,这个class我们就叫timer test,好吧,我们叫定时器啊。使用定时器指定什么呀,指定定时任务。
05:03
嗯。首先,我们可以创建定时器对象。怎么创建登录文档里边怎么要求你就怎么创建就完事了,是不是那这这样要求,那就那CTRLC呗,你会吗?CTRLV粘贴你会吗?来吧,对不对?哎,给它out回车给它导进来就行了,哎呦,这不是个方法啊,应该叫叫给它引进来啊timer timer等于new timer是不是好把这个拿过来,哎呀,没有new不行啊,得new一下是不是来这块呢?我们给它引进来timer有了创建定时器对象,你可以怎么办呢?在这个位置给他给一个处也是没问题的。对吧,这样的话就表示是守护守护线程的方式。是不是,那么接下来你可以指定什么呀,定时任务啊。点该。这个方法。
06:01
有三个参数。这个方法啊,第一个参数是R。Timer task你得指定的叫定时任务啊,对吧?第二个参数是第一次执行时间。第三个参数是什么呀。是间隔多久执行一次?啊,间隔多久执行一次,那我们来可以看一下,可以看一下啊来timer schedule这个方法。是。啊来我们拿一下各位啊,定时任务我们先一会儿再说啊,这个是定时任务,一会儿再说。第二个参数呢,第一次执行时间我希望是九点半。我希望是九点半的时候开始执行,那么这个时间应该怎么指定啊?大家还记得怎么获取时间吗?
07:00
Date time new,一个date。First time。第一次执行时间。那这个时间怎么办呢?我想指定九点半。怎么写呀?首先需要new一个什么simple date format吧,还记得吧,这都是基本功啊。new一个simple date format这。是不是指定一个时间YYYYMMDDHHMMSSSSS。对吧,年月日十分秒毫秒。毫秒可以不指定,对呀,年月日十分秒就行了,指定到这儿调用它那个方法,一个方面的是格式化的一个pass方法,是不是是不是可以把字符串转换成一个日期啊,这个字符串你给我写上啊。嗯,这个是2020年的。呃,几月几号,这是3月14号。3月14号。
08:02
空格。嗯,九点。对不对,九点半呗。对吧,那么返回的这个就是一个什么呀,哎,日期类型。这异常不管了啊。来。这个呢,我们给它引进来就行了,这样的话,第一次的执行时间就有了,间隔多久执行一次呢?间隔十秒钟执行一次,假如说那你这个时候就可以写1000乘以多少啊,十倍。间隔十秒执行一次。对不对,哎,这就可以了,这就可以了啊,这就写完了,但是呢,我们这里啊,还有一个参数没有解决。就是我们的定时什么呀,任务对吧,我们可以看一下这个定时任务。啊,因为这个timer对象创建出来之后,它的schedule这个方法,第一个参数timer task给我们点过去定时任务,定时任务发现我们这个定时任务来看一下瞅一眼。
09:04
这个定时任务是什么呀?它是一个抽象类呀。抽象类你没法尿啊啊。所以你是不是需要在这单独编写一个定时任务类,编写一个定时任务类啊,Class,我们叫log timer task。是吧,Log task。然后呢,我们假如说这是一个记录日志的定时任务啊,假设这是一个记录日志的。定时任务。Log timer task。去继承谁啊,哎,Timer task。这个啊。这个啊,这是test,这是task看见了吧。
10:00
那我们子类如果继承一个抽象类的话,就得把抽象方法加以实现,这是我们之前讲过的,里边有个方法是乱方法,大家看更像一个现成的是不是?对吧,你在这里边写边写你需要执行的。任务就行了。明白吗?你这个位置,你可以一个什么出来,一个log出来。这样的话你指定这个定时任务就可以了,第一个参数是一个定时任务对象。第二个参数是这个任务执行的第一次时间。第三个参数是间隔多久执行一次。啊,在这个地方编写你需要执行的任务就行了。嗯。嗯。那每隔十秒钟我们干什么?假如进行一次数据备份吧,我就直接直接我。我说句话啊。
11:03
呃,Simple date format,我再用一下上面这个代码啊。来用一下这个。然后呢,调用它的format方法,你有一个date,是不是系统当前时间啊。格式化是不是返回当前时间?拿回这个时间之后呢,我在这写上一句话啊。这个时间。对吧,哎,完成成功啊,完成了一次数据备份。啊,完成了一次数据备份,那行吧,那这个程序就写完了,各位啊,就非常之简单对吧?创建定时器调用一个方法传三个参数,第一次执行时间你指定一下间隔多久执行一次这个任务,第一个参数你指定一个任务,而这个任务呢,它是个抽象类,抽象类呢没法拗,对不对,它是抽象的。那么再往下面,你可以写一个time task这个抽象类的一个子类。
12:05
写上去之后呢,接下来我们就可以在这里重写转方法了呀。对吧。看一看。啊。看一看啊。看看这个程序,我们执行一下。但这个九点半。九点。34。09:34。嗯。30秒。来我执行一下啊。看看啊,等着三十四三十秒的时候开始执行,09:34:30的时候开始执行,大家看啊,到这个时间点会不会执行。瞅一眼啊。
13:01
到点他开始执行,每隔十秒钟执行一次,你看走走八,你看是不是,哎,到了一个时间点,成功完成一次数据备份。过十秒钟之后,你看啊,再走再走再走再走吧,是吧,过十秒它就又执行一次。不需要你管,不需要你管啊,每隔十秒它会再来一次。这个定时任务一旦你设定好,你就不用管,一运行服务器,你只要不关闭是吧,这个定时器它会一直执行,直到服务器关闭为止啊,它相当于说你最好也可以给它设置成后台的一个线程的一种形式,像这种形式守护的方式。啊,守护的方式。你看。对吧?哎,每隔十秒钟它会备份一次数据。那你这个时间,你可以写的时间长一些,你写上一年也没问题。间隔,每间隔一年执行一次,对吧?乘以60那是一分钟,一分钟乘以60是一小11小时乘以。
14:06
乘以24是一天,一天乘以365。这是一年吗?对,他现在就是个线程,你把它理解成线程就行了啊,这是间隔一年,每每年执行一次。对吧?哎,每年执行一次,那我们这个就不再等了,好吧,就不再等了啊,等一年我们白头发都白了好吧?好,那这块的话,咱们这个呃,定时器呢,我们就给大家解释到这儿啊,这个东西呢,呃,简单看看它底层其实一个timer这样的一个对象,然后呢,指定一下这个定时任务啊定时任务然后呢啊,指定第一次的执行时间,间隔多久执行一次,然后定时任务呢,写一下好,那我问大家问题啊。这里可以使用匿名内部类吗?就是这个类,我不写行吗?
15:00
行不行?可以吗?可以啊,可以啊。对,抽象你没法拗是不是?你不了吗?但你可以加个大括号。啊,然后把这个方法给他实现一下。啊。是不是,哎,你可以用匿名内部类的方式啊,没任何问题啊,没有任何问题。这个代码呢,我就不写了,各位啊。好,大概就是这样,这是一个匿名类类。匿名内部类方式啊。好就拗一个抽象类,然后呢,抽象类new的时候呢,后边要加个大括号。匿名内部类嘛,是不是把它看成是个接口就行了啊。
我来说两句