public static ScheduledFuture scheduleAtFixedRate(Runnable runnable, long periodInMilli) {
        /** 我们默认设定一个runnable生命周期与一个msgId一一对应 */
        Runnable proxied = wrapRunnable(runnable, null);
        return newSingleThreadScheduler().scheduleAtFixedRate(proxied, 0, periodInMilli, TimeUnit.MILLISECONDS);
    }
public static ScheduledFuture scheduleAtFixedRate ( Runnable runnable , long periodInMilli ) { Runnable proxied = wrapRunnable ( runnable , null ) ; return newSingleThreadScheduler ( ) . scheduleAtFixedRate ( proxied , 0 , periodInMilli , TimeUnit . MILLISECONDS ) ; }
轻量级的定时任务执行器。 任务之间不会并行执行，任何时刻都至多只会有一个任务在执行。
如果下一个任务执行时间已经到了，但是前一个还没有执行完毕，那么下个任务等待直到前一个执行完，然后再马上开始.

@param runnable      执行的任务
@param periodInMilli 任务启动固定间隔，单位毫秒