首页 > 编程知识 正文

java scanner用法,javatimer可调时钟

时间:2023-05-05 20:43:20 阅读:62784 作者:4503

Timer通常用于延迟任务或循环定时执行任务。

例如,指定一小时后报警,或指定每天响6:00次。 这些是延迟任务或定时周期的任务

使用Timer时,必须由TimerTask执行任务。 这是实现Runnable接口的线程。 一些run方法必须由线程执行,并且是自己定义的。

让我们看看代码:

上面一行的代码只是定义了Date、Timer和TimerTask

让我们来看看使用方法:

代码的前两行只接受两个参数: TimerTask和时间。 这两种使用方法都只执行一次,不是循环执行。

第一行:在指定时间运行传入的TimerTask,不循环运行

第二行:运行TimerTask需要时间。 这里的意思是晚一秒运行TimerTask

中间两行与循环执行有关,比前面两行传递的参数多一个,即间隔时间。 隔一段时间运行TimerTask

第三行: TimerTask在一秒后运行,每隔一秒运行一次。 第二个参数是延迟,第三个参数是间隔时间

第4行:在指定时间运行TimerTask,并每秒开始运行

下一个重要的是以下两种方法。 后面的两种方法看起来和前面来了两种方法不一样。 哈哈。

怎么样,往下看。

第五行:实际上与第三行相同,都是延迟运行,然后每隔一定的时间运行TimerTask

第6行:这一行和第4行不同。 同样的情况是,都在指定的时间开始执行,每隔一定时间执行一次。

区别在于,schedule在运行时,如果经过了Date,即如果Date小于当前时间,它将立即运行并每隔一段时间运行一次

scheduleAtFixedRate表示运行时日期已过。 又执行了。 然后,每隔一定时间执行一次。

查看代码执行结果:

这是schedule的执行结果。如果这个时间过了,会直接执行,然后开始每隔一秒后执行。

让我们看看scheduleAtFixedRate的运行结果。

这是scheduleAtFixedRate的运行结果。 这里每隔五分钟运行一次。 我在17:08左右做了这个。 这里指定的时间是16:30

从16:30开始计算,每五分钟(即分别运行1633603601633603516336040163360451633605016336055173600017336006 ),正好八次。 这是正确的,所以我们刚执行的时候一次执行。其实你会发现倒数第二个间隔不是5分钟,而是正好17:10的当前毫秒数。

这就是两者的区别。 schedule直接运行,以当前为开始时间开始运行,不再运行过去。 另一方面,scheduleAtFixedRate是判断时间,在经过的情况下,即使算出之前执行的次数也依次执行,等待下一次执行时间的到来。 接下来是17点10分,不是17点13分(17点08分后的5分)。

8次

最后,看看第五行和第三行的区别。 其实没什么区别。 让我们看看源代码:

查看这两种方法的源代码,它们几乎相同,位于最后一个参数的传递中。 一个是-period一个是period

接下来继续看。

首先,让我们看看代码第一个红框第一行的代码。 里面计算的是绝对值,和正负数没有关系吧。 然后第二个红框,直接分配值,就没有了。

现在,让我们来看看TimerTask的代码:

这里只涉及一个同步,但最后一次返回时,如果延迟时间小于0,则判断为相加,如果大于0,则判断为相减。 那不是啊。 加上一个负和减去一个正有什么不同,最后一次是在17:10的时候执行的

一看到这里我就怀疑我是否学了多年数学就过关了。 我想当时每次都是数一数二的数学成绩,看到这里就再无知不过了,一直到最后都一样,所以在这里就不知道了。 为什么一个是传负,另一个是传正呢?

不知道,不知道,真的不知道。 哪个大神能帮我解开混乱?

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。