/** * 在線程池提交任務的最後一步——被線程池拒絕的任務,能夠在拒絕後調用隊列的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); }