比如timer.schedule(new PeriodicityTask(), 1000, delay);//delay=1000 1秒
如果PeriodicityTask的run()方法执行的时间过长,超过了秒会怎么样???
run在执行的一半会被终止吗?马上给分

解决方案 »

  1.   

    API中是这样写的:
    安排指定的任务从指定的延迟后开始进行重复的固定延迟执行。以近似固定的时间间隔(由指定的周期分隔)进行后续执行。 
    在固定延迟执行中,根据前一次执行的实际执行时间来安排每次执行。如果由于任何原因(如垃圾回收或其他后台活动)而延迟了某次执行,则后续执行也将被延迟。从长期来看,执行的频率一般要稍慢于指定周期的倒数(假定 Object.wait(long) 所依靠的系统时钟是准确的)。 固定延迟执行适用于那些需要“平稳”运行的重复活动。换句话说,它适用于在短期运行中保持频率准确要比在长期运行中更为重要的活动。这包括大多数动画任务,如以固定时间间隔闪烁的光标。这还包括为响应人类活动所执行的固定活动,如在按住键时自动重复输入字符。 
    参数:
    task - 所要安排的任务。
    delay - 执行任务前的延迟时间,单位是毫秒。
    period - 执行各后续任务之间的时间间隔,单位是毫秒。 
    抛出: 
    IllegalArgumentException - 如果 delay 是负数,或者 delay + System.currentTimeMillis() 是负数。 
    IllegalStateException - 如果已经安排或取消了任务,已经取消了计时器,或者计时器线程已终止。所以应该不会终止的.
      

  2.   

    补充一下:如果你希望按时的并发运行,可以在
    PeriodicityTask()  里面启动一个线程来执行你需要的任务,而PeriodicityTask(),   自己则马上返回。这样的话,同时并发执行中的线程会慢慢变多的,要小心了。
      

  3.   

    delay楼上的不是说了吗?是任务调度前的廷迟时间,任务执行时间长短与调度者没有关系