ScheduledExecutorServicescheduleAtFixedRate
和scheduleWithFixedDelay
方法之间的主要区别是什么?
scheduler.scheduleAtFixedRate(new Runnable() {
@Override
public void run() {
System.out.println("scheduleAtFixedRate: " + new Date());
}
}, 1, 3L , SECONDS);
scheduler.scheduleWithFixedDelay(new Runnable() {
@Override
public void run() {
System.out.println("scheduleWithFixedDelay: " + new Date());
}
}, 1, 3L , SECONDS);
它们打印的时间完全相同,似乎它们以相同的时间间隔执行。
尝试Thread.sleep(1000);
在您的run()
方法中添加一个调用…基本上,这是根据上一次执行的 结束时间 和(从逻辑上)
开始的 时间安排某些事情之间的区别。
例如,假设我安排一个警报以固定的 速率 每小时发出一次,并且每次发出警报,我都会喝一杯咖啡,这需要10分钟。假设从午夜开始,我将有:
00:00: Start making coffee
00:10: Finish making coffee
01:00: Start making coffee
01:10: Finish making coffee
02:00: Start making coffee
02:10: Finish making coffee
如果我以固定的 延迟时间 安排一小时,我将有:
00:00: Start making coffee
00:10: Finish making coffee
01:10: Start making coffee
01:20: Finish making coffee
02:20: Start making coffee
02:30: Finish making coffee
您想要哪一个取决于您的任务。
问题内容: 我正在编写一个每10分钟记录一次音频的Android应用程序。我正在使用计时器来做到这一点。但是schedule和scheduleAtFixedRate之间有什么区别?相比于另一种使用,对性能有好处吗? 问题答案: 最好通过以下非Android文档来解释差异: 固定速率计时器()基于开始时间(因此,每次迭代都将在处执行)。 在固定速率执行中,相对于初始执行的计划执行时间来计划每个执行。
我对方法的期望(根据我在中给出的理解,其中每次执行都是在前一个任务执行完成后安排的)应该在第1行之后创建两个线程。 一个用于计时器,它为任务生成另一个线程。一旦第一个任务线程死亡,将创建另一个任务线程并继续执行。但在调试点,我只看到一个线程对应于计时器。为什么不为实现可运行的任务执行线程? 我对scheduleAtFixedRate()方法的期望(根据我在javadocs中给出的理解,其中每个执行
本文向大家介绍Java Timer scheduleAtFixedRate()方法与示例,包括了Java Timer scheduleAtFixedRate()方法与示例的使用技巧和注意事项,需要的朋友参考一下 计时器类方法 语法: scheduleAtFixedRate()方法在java.util包中可用。 scheduleAtFixedRate(TimerTask tt,Date ft,lon
我正在编写一个Android应用程序,每10分钟录制一次音频。我用定时器来做这件事。但是scheduleAtFixedRate和scheduleAtFixedRate之间有什么区别呢?使用其中一种方法是否有性能优势?
我在程序(计时器类)中使用scheduleAtFixedRate方法。它每秒钟运行一次,但有时这种方法会变得非常快(每秒执行3-4次)。 然而,我在网上做了一些研究,发现了这个: 复制自android开发者页面: 对于固定速率执行,任务每次连续运行的开始时间都是计划的,而不考虑上一次运行的时间。如果延迟阻止计时器按时启动任务,则这可能会导致一系列串接运行(一个接一个地启动)。 我需要固定的计时器。
问题内容: 这两个类的方法有什么区别: 和 文档并没有使它们之间的区别清晰。 问题答案: 该文档确实解释了差异: 时间表: 在固定延迟执行中,相对于上一次执行的实际执行时间安排每次执行。如果执行由于任何原因(例如垃圾回收或其他后台活动)而延迟,则后续执行也将延迟。 因此,假设延迟为5秒,并且每个任务花费2秒,您将获得 其中表示执行任务需要1秒,表示等待1秒。 但现在假设发生了一个长GC(用表示)并