scheduleWithFixedDelay,是以上一个任务开始的时间计时,period时间过去后,检测上一个任务是否执行完毕,如果上一个任务执行完毕,则当前任务立即执行,如果上一个任务没有执行完毕,则需要等上一个任务执行完毕后立即执行。
scheduleAtFixedRate ,是以上一个任务结束时开始计时,period时间过去后,立即执行。
scheduleAtFixedRate ,是以上一个任务结束时开始计时,period时间过去后,立即执行。
网上看到也有个这个标题的例子,不过他写反了,写反了,写反了!!
public class ScheduledTest { public static void main(String[] args) { ScheduledExecutorService executorService = Executors .newSingleThreadScheduledExecutor(); // executorService.scheduleAtFixedRate(new Runnable() { // @Override // public void run() { // // try { // System.out.println("run " + System.currentTimeMillis()); // Thread.sleep(1000); // // } catch (InterruptedException e) { // // TODO Auto-generated catch block // e.printStackTrace(); // } // } // }, 0, 100, TimeUnit.MILLISECONDS); executorService.scheduleWithFixedDelay(new Runnable() { @Override public void run() { try { System.out.println("run " + System.currentTimeMillis()); Thread.sleep(1000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }, 0, 100, TimeUnit.MILLISECONDS); } }自己去试试就全知道了,网上也不能全信!