package com.netifera.platform.ui.updater; import java.util.concurrent.ScheduledFuture; import java.util.concurrent.ScheduledThreadPoolExecutor; import java.util.concurrent.TimeUnit; public class TaskScheduler { private static final TaskScheduler instance = new TaskScheduler(); private final ScheduledThreadPoolExecutor executor = new ScheduledThreadPoolExecutor(1); private TaskScheduler() { /* we want only one thread */ executor.setMaximumPoolSize(1); // not useful since ScheduledThreadPoolExecutor has PoolSize fixed } public static TaskScheduler getInstance() { return instance; } public void remove(ScheduledTask scheduledTask) { ScheduledFuture<?> future = scheduledTask.getFuture(); if(future != null) { future.cancel(false); executor.purge(); } } public ScheduledFuture<?> submit(ScheduledTask scheduledTask) { int period = scheduledTask.getPeriod(); if(period > 0) { return executor.scheduleAtFixedRate(scheduledTask, scheduledTask.getNextRunDelay(),scheduledTask.getPeriod(),TimeUnit.MILLISECONDS); } else { return executor.schedule(scheduledTask, scheduledTask.getNextRunDelay(), TimeUnit.MILLISECONDS); } } }