目的:
區(qū)別scheduleAtFixedRate
和scheduleWithFixedDelay
的用法益缎。
api:
public ScheduledFuture<?> scheduleAtFixedRate(Runnable command, long initialDelay, long period, TimeUnit unit)
創(chuàng)建并執(zhí)行一個在給定初始延遲后首次啟用的定期操作,后續(xù)操作具有給定的周期占调;也就是將在 initialDelay 后開始執(zhí)行,然后在 initialDelay+period 后執(zhí)行替梨,接著在 initialDelay + 2 * period 后執(zhí)行删窒,依此類推。如果任務(wù)的任何一個執(zhí)行遇到異常葡秒,則后續(xù)執(zhí)行都會被取消。否則嵌溢,只能通過執(zhí)行程序的取消或終止方法來終止該任務(wù)眯牧。如果此任務(wù)的任何一個執(zhí)行要花費比其周期更長的時間,則將推遲后續(xù)執(zhí)行赖草,但不會同時執(zhí)行学少。
注意: 如果執(zhí)行這個命令花費時間比間隔時間period
長,那么下一個任務(wù)會在該任務(wù)執(zhí)行完之后立即執(zhí)行秧骑。
public ScheduledFuture<?> scheduleWithFixedDelay(Runnable command, long initialDelay, long delay, TimeUnit unit)
創(chuàng)建并執(zhí)行一個在給定初始延遲后首次啟用的定期操作版确,隨后,在每一次執(zhí)行終止和下一次執(zhí)行開始之間都存在給定的延遲乎折。如果任務(wù)的任一執(zhí)行遇到異常绒疗,就會取消后續(xù)執(zhí)行。否則骂澄,只能通過執(zhí)行程序的取消或終止方法來終止該任務(wù)吓蘑。
注意: 執(zhí)行完本任務(wù)之后,等待延遲時間之后坟冲,在執(zhí)行下一次任務(wù)磨镶。
實例:
package com.novel.collect;
import java.util.Date;
import java.util.concurrent.ScheduledThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
import org.apache.log4j.Logger;
public class CollectScheduledThread {
private static Logger log = Logger.getLogger(CollectScheduledThread.class);
private static ScheduledThreadPoolExecutor threadPool;
static{
threadPool = new ScheduledThreadPoolExecutor(Runtime.getRuntime().availableProcessors());
}
public static void main(String[] args) {
threadPool.scheduleAtFixedRate(new CollectRunnable("任務(wù)1"), 0, 1, TimeUnit.MINUTES);
threadPool.scheduleWithFixedDelay(new CollectRunnable("任務(wù)2"), 0, 1, TimeUnit.MINUTES);
}
}
class CollectRunnable implements Runnable{
private String name = "";
public CollectRunnable(String name) {
this.name = name;
}
@Override
public void run() {
System.out.println("任務(wù)【" + name + "】執(zhí)行。" + new Date());
try {
Thread.sleep((long) (1000*60*1.5));
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
/*
任務(wù)【任務(wù)2】執(zhí)行健提。Tue Aug 23 09:57:38 CST 2016
任務(wù)【任務(wù)1】執(zhí)行琳猫。Tue Aug 23 09:57:38 CST 2016
任務(wù)【任務(wù)1】執(zhí)行。Tue Aug 23 09:59:08 CST 2016
任務(wù)【任務(wù)2】執(zhí)行私痹。Tue Aug 23 10:00:08 CST 2016
任務(wù)【任務(wù)1】執(zhí)行沸移。Tue Aug 23 10:00:38 CST 2016
任務(wù)【任務(wù)1】執(zhí)行痪伦。Tue Aug 23 10:02:08 CST 2016
任務(wù)【任務(wù)2】執(zhí)行。Tue Aug 23 10:02:38 CST 2016
任務(wù)【任務(wù)1】執(zhí)行雹锣。Tue Aug 23 10:03:38 CST 2016
任務(wù)【任務(wù)1】執(zhí)行网沾。Tue Aug 23 10:05:08 CST 2016
任務(wù)【任務(wù)2】執(zhí)行。Tue Aug 23 10:05:08 CST 2016
任務(wù)【任務(wù)1】執(zhí)行蕊爵。Tue Aug 23 10:06:38 CST 2016
任務(wù)【任務(wù)2】執(zhí)行辉哥。Tue Aug 23 10:07:38 CST 2016
任務(wù)【任務(wù)1】執(zhí)行。Tue Aug 23 10:08:08 CST 2016
任務(wù)【任務(wù)1】執(zhí)行攒射。Tue Aug 23 10:09:38 CST 2016
任務(wù)【任務(wù)2】執(zhí)行醋旦。Tue Aug 23 10:10:08 CST 2016
任務(wù)【任務(wù)1】執(zhí)行。Tue Aug 23 10:11:08 CST 2016
任務(wù)【任務(wù)1】執(zhí)行会放。Tue Aug 23 10:12:38 CST 2016
任務(wù)【任務(wù)2】執(zhí)行饲齐。Tue Aug 23 10:12:38 CST 2016
任務(wù)【任務(wù)1】執(zhí)行。Tue Aug 23 10:14:08 CST 2016
任務(wù)【任務(wù)2】執(zhí)行咧最。Tue Aug 23 10:15:08 CST 2016
任務(wù)【任務(wù)1】執(zhí)行捂人。Tue Aug 23 10:15:38 CST 2016
任務(wù)【任務(wù)1】執(zhí)行。Tue Aug 23 10:17:08 CST 2016
任務(wù)【任務(wù)2】執(zhí)行矢沿。Tue Aug 23 10:17:38 CST 2016
任務(wù)【任務(wù)1】執(zhí)行滥搭。Tue Aug 23 10:18:38 CST 2016
任務(wù)【任務(wù)1】執(zhí)行。Tue Aug 23 10:20:08 CST 2016
*/