public ScheduledFuture<?> scheduleTask(String user, Runnable runnable, long delay) { synchronized (nearRealTimeOrderedTasksMap) { UserTasks tasks = getUserTasks(user); if (tasks == null) return null; ScheduledUserTask scheduledTask = new ScheduledUserTask(runnable, delay, null, null); tasks.addScheduledTask(scheduledTask); return scheduledTask.getScheduledFuture(); } }
public void addNearRealTimeOrderedTask(String user, Runnable runnable) { synchronized (nearRealTimeOrderedTasksMap) { UserTasks tasks = nearRealTimeOrderedTasksMap.get(user); if (tasks == null) return; tasks.addTask(runnable); if (numberOfOrderedTasks == 0) nearRealTimeMainTaskFuture = scheduler.scheduleWithFixedDelay( nearRealTimeOrderedTask, NEAR_REAL_TIME_DELAY, NEAR_REAL_TIME_DELAY, TimeUnit.MILLISECONDS); numberOfOrderedTasks++; } }
public void removeUser(String user) { log.info("Removing user " + user); UserTasks tasks; synchronized (nearRealTimeOrderedTasksMap) { tasks = nearRealTimeOrderedTasksMap.remove(user); } if (tasks != null) { tasks.cancelAllScheduledTasks(); tasks.waitForTasksCompletion(); } synchronized (nearRealTimeOrderedTasksMap) { if (nearRealTimeOrderedTasksMap.size() == 0) { stop(); return; } } }