package com.interview.books.fgdsb; import java.util.TreeMap; /** * Created_By: stefanie * Date: 15-2-2 * Time: 上午11:30 */ public class NLC13_TimerCallbackRegister { /* System Function */ interface Callback{ public void execute(); } static class SysExecuation{ public static void register_system_timer_callback(long time, Callback callback){ } } /* Register Wrapper to register next callback when one is executed. */ class RegisteWapper implements Callback{ Callback callback; CallBackRegister register; public RegisteWapper(Callback callback, CallBackRegister register){ this.callback = callback; this.register = register; } public void execute(){ callback.execute(); register.regNext(); } } class CallBackRegister{ TreeMap<Long, Callback> regMap = new TreeMap(); long currentTimer = Long.MAX_VALUE; public void registerCallback(long time, Callback callback){ if(time <= System.currentTimeMillis()) { callback.execute(); } else { regMap.put(time, callback); if(time < currentTimer){ currentTimer = time; SysExecuation.register_system_timer_callback(currentTimer, new RegisteWapper(callback, this)); } } } private void regNext() { regMap.remove(currentTimer); currentTimer = regMap.firstKey(); SysExecuation.register_system_timer_callback(currentTimer, new RegisteWapper(regMap.get(currentTimer), this)); } } }