public void run() { final long base_time = System.currentTimeMillis(); long next_time, sleep_time; long cnt = 0; while (running) { try { _run(); next_time = base_time + (++cnt * tick_time); sleep_time = Math.max(0, next_time - System.currentTimeMillis()); Util.sleep(sleep_time); } catch (Throwable t) { log.error(Util.getMessage("FailedExecutingTasksS"), t); } } }