/** * 在线程池提交任务的最后一步——被线程池拒绝的任务,能够在拒绝后调用队列的put()方法,让任务的提交者阻塞,直到队列中任务被被线程池执行后,队列有了多余空间,调用方才返回 */ private static class BlockCallerPolicy implements RejectedExecutionHandler { @Override public void rejectedExecution(Runnable r, ThreadPoolExecutor executor) { try { executor.getQueue().put(r); } catch (InterruptedException e) { e.printStackTrace(); } } }
/** * 初始化接口 * * @date :2019/3/14 17:15 */ public interface InitBaseHandler { /** * 实现此方法将在服务器启动时进行初始化操做 */ void init(); }
LogHandler.info("no2.初始化游戏数据......"); applicationContext.getBeansOfType(InitBaseHandler.class).values().forEach(InitBaseHandler::init);
/** * 定时更新 */ @Override public void init() { LogHandler.info("初始化定时任务"); int second = Calendar.getInstance().get(Calendar.SECOND); ExecutorHandler.scheduledExecutorService.scheduleAtFixedRate(() -> { Calendar calendar = Calendar.getInstance(); int minute = calendar.get(Calendar.MINUTE); if (minute % INTERVAL == 0) { playerService.updatePlayer(); playerService.updatePlayerData(); globalService.updateGlobalData(); } }, 60 - second, 60, TimeUnit.SECONDS); }