1、scheduleAtFixedRate 方法,顾名思义,它的方法名称的意思是:已固定的频率来执行某项计划(任务)。
2、scheduleWithFixedDealy,相对固定的延迟后,执行某项计划。
还是比较简单明了的描述比较好:第一个方法是固定的频率来执行某项计划,它不受计划执行时间的影响。到时间,它就执行。
而第二个方法,相对固定,据鄙人理解,是相对任务的。即无论某个任务执行多长时间,等执行完了,我再延迟指定的时间。也就是第二个方法,它受计划执行时间的影响。
我再举一个简单的例子吧。
比方说:
某航空公司的航班:对于普通老百姓来说,不管你是在路上堵车了,还是正在跑呢,它是按时按点飞的。你的延误耽误不了飞机的起飞。这就是第一个方法。
但是对于某些...什么什么,是吧,没到,他在小几那磨机,各种12s啊,什么什么的,灰机就会等,各种借口等,嗳,那个人登机了,好的,飞机就走你了。这就是第二个方法干的事。
最简单,最直接的就是来个demo,测试一下就知道了。jdk文档中ScheduledExecutorService该类的描述中有个例子,来了改的。
import static java.util.concurrent.TimeUnit.*;
class BeeperControl {
private final ScheduledExecutorService scheduler =
Executors.newScheduledThreadPool(1);
public void beepForAnHour() {
final Runnable beeper1 = new Runnable() {
public void run() {
// Thread.sleep(5*1000); 测试scheduleAtFixedRate方法时,放开此注释,有异常,请扑获
System.out.println("beep1"); }
};
final Runnable beeper2 = new Runnable() {
public void run() {
// Thread.sleep(5*1000); 测试scheduleWithFixedDelay方法时,放开此注释,有异常,请扑获
System.out.println("beep2"); }
};
final ScheduledFuture<?> beeperHandle1 =
scheduler.scheduleAtFixedRate(beeper1, 5, 5, SECONDS);
final ScheduledFuture<?> beeperHandle2 =
scheduler.scheduleAtFixedRate(beeper2, 5, 5, SECONDS);
scheduler.schedule(new Runnable() {
public void run() { beeperHandle1.cancel(true); }
}, 20, SECONDS);
scheduler.schedule(new Runnable() {
public void run() { beeperHandle2.cancel(true); }
}, 20, SECONDS);
}
}
转自http://hi.baidu.com/leige87/item/f4501cd8cdbb693c38f6f74b
分享到:
相关推荐
主要为大家详细介绍了java中timer的schedule和scheduleAtFixedRate方法区别,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
Java定时任务schedule和scheduleAtFixedRate的异同
NULL 博文链接:https://michael1990.iteye.com/blog/2113141
调用scheduleAtFixedRate()方法或者scheduleWithFixedDelay()方法时,会向DelayQueue添加一个实现了RunnableScheduledFuture接口的ScheduledFutureTask
Executors.newScheduledThreadPool(1).scheduleAtFixedRate(new Runnable() { public void run() { Integer number = NumberMachine.getInstance().getCommonManager().generateNewManager(); System.out....
调度可以用 Timer 【调用 schedule() 或者 scheduleAtFixedRate() 方法实现】或者 ScheduledExecutorService 【结合工作中其它的需求,笔者选用此】 ScheduledExecutorService的初始化(线程池):
定时删除文件,导入库类有Timer类,TimeTask类,运用的函数有:scheduleAtFixedRate()。
Java中的Timer和TimerTask简介...另一种执行任务的模式是scheduleAtFixedRate。在这种模式下,Timer类会尽量使任务保持在一个固定的频率下重复执行。 TimerTask一个抽象类,它的子类代表一个可以被Timer计划的任务。
timer.scheduleAtFixedRate(new TimerTask() { @Override public void run() { Message message=new Message(); message.what=1; handler.sendMessage(message); } }, 1000,5000); 2.在线程中创建Handle
串行执行器服务 ScheduledExecutorService 的测试实用程序实现 允许测试如下代码: ... service.scheduleAtFixedRate(new Runnable() { @Override public void run() { count++; bar.doWhatever(); } },
timer.scheduleAtFixedRate(new TimerTask() { int j=0; int i=0; @Override public void run() { if(over==true){ return; } handler.sendEmptyMessage(kPostInvalidate); i=i+...
scheduledExecutorService.scheduleAtFixedRate(new ScrollTask(), 1,2, TimeUnit.SECONDS); super.onStart(); } @Override protected void onStop() { //当Activity不可见的时候停止切换 ...