Timer scheduleAtFixedRate与schedule的区别_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > Timer scheduleAtFixedRate与schedule的区别

Timer scheduleAtFixedRate与schedule的区别

 2014/4/15 18:26:30  wangzjie  程序员俱乐部  我要评论(0)
  • 摘要:scheduleAtFixedRate与schedule的区别主要是基准时间点以及第一次执行时执行的次数timer.scheduleAtFixedRate(TimerTask,startTime,period):如果执行时间executeTime>startTime,则一执行就会从startTime开始,每隔peroid跑TimerTask。以startTime为起点publicclassTimerTest{publicstaticvoidmain(Stringargs[]
  • 标签:

scheduleAtFixedRate与schedule的区别主要是基准时间点以及第一次执行时执行的次数

?

?timer.scheduleAtFixedRate(TimerTask, startTime, period): 如果执行时间executeTime>startTime,则一执行就会从startTime开始,每隔peroid跑TimerTask。以startTime为起点

?

class="java">public class TimerTest {
    public static void main(String args[]) throws ParseException {
        SimpleDateFormat f = new SimpleDateFormat(
                "yyyy-MM-dd HH:mm:ss");
        Timer timer = new Timer();
        timer.scheduleAtFixedRate(new TimerTask() {
            @Override
            public void run() {
                System.out.println("do task at "+new Date());
            }
        }, f.parse("2014-04-15 17:20:00"), 10 * 1000);
    }
}

?执行时间是17:28:01,执行结果是

?

?

do task at Tue Apr 15 17:28:01 CST 2014
do task at Tue Apr 15 17:28:01 CST 2014
do task at Tue Apr 15 17:28:01 CST 2014
do task at Tue Apr 15 17:28:01 CST 2014
do task at Tue Apr 15 17:28:01 CST 2014
do task at Tue Apr 15 17:28:01 CST 2014
do task at Tue Apr 15 17:28:01 CST 2014
//以上是开始执行时立刻执行了X次,X是从startTime开始每隔peroid时间执行一次直到executeTime.
//以下是以startTime开始每隔peroid执行一次
do task at Tue Apr 15 17:28:10 CST 2014
do task at Tue Apr 15 17:28:20 CST 2014

?

timer.schedule(TimerTask, startTime, period): 如果执行时间executeTime>startTime,其实基准时间已经变成executeTime,每隔peroid跑TimerTask。以executeTime为起点。(如果executeTime<startTime,则基准时间还是startTime)

同样的例子,结果是

?

do task at Tue Apr 15 17:28:01 CST 2014
do task at Tue Apr 15 17:28:11 CST 2014
do task at Tue Apr 15 17:28:21 CST 2014

?就在executeTime执行一次,然后以executeTime为基准点每隔peroid执行一次

?

?scheduleAtFixedRate与schedule的下一次执行时间都是上一次执行完成时间+间隔时间,只是由于第一次执行时executeTime>startTime时造成的基准时间不一致而造成的的。

?

另外,如果task的执行时长>间隔时长peroid, 则下一次执行时间是上一次完成时间,?scheduleAtFixedRate与schedule和都是一样的。

public class TimerTest {
    public static void main(String args[]) throws ParseException {
        SimpleDateFormat f = new SimpleDateFormat(
                "yyyy-MM-dd HH:mm:ss");
        Timer timer = new Timer();
        timer.schedule(new TimerTask() {
            @Override
            public void run() {
                System.out.println("start do task at "+new Date());
                try{
                    Thread.sleep(11000);
                }catch(Exception e){
                    e.printStackTrace();
                }
                System.out.println("end do task at "+new Date());
            }
        }, f.parse("2014-04-15 18:01:00"), 10 * 1000);
    }
}

?执行时间是18:01:25, 执行结果

start do task at Tue Apr 15 18:01:25 CST 2014
end do task at Tue Apr 15 18:01:36 CST 2014
//这里可以看出下次执行时间就是上次完成时间
start do task at Tue Apr 15 18:01:36 CST 2014
end do task at Tue Apr 15 18:01:47 CST 2014
start do task at Tue Apr 15 18:01:47 CST 2014
end do task at Tue Apr 15 18:01:58 CST 2014

?

scheduleAtFixedRate结果也是一样的

  • 相关文章
发表评论
用户名: 匿名