import java.util.concurrent.*;
import java.util.HashMap;
import java.util.Map;
public class CLIArgsScheduler {
private final ExecutorService executor;
private final Map<String, Runnable> tasks;
private final Map<String, ScheduledFuture<?>> scheduledFutures;
public CLIArgsScheduler() {
this.executor = Executors.newFixedThreadPool(10); // Adjust thread pool size as needed
this.tasks = new HashMap<>();
this.scheduledFutures = new HashMap<>();
}
public void addTask(String name, Runnable task) {
tasks.put(name, task);
}
public void scheduleTask(String name, long delay, TimeUnit unit) {
ScheduledFuture<?> future = executor.schedule(tasks.get(name), delay, unit);
scheduledFutures.put(name, future);
}
public void overrideSchedule(String name, long delay, TimeUnit unit) {
// Cancel the existing scheduled task if it exists
if (scheduledFutures.containsKey(name)) {
scheduledFutures.get(name).cancel(true);
scheduledFutures.remove(name);
}
// Reschedule the task
scheduleTask(name, delay, unit);
}
public void shutdown() {
executor.shutdown();
}
public static void main(String[] args) throws InterruptedException {
CLIArgsScheduler scheduler = new CLIArgsScheduler();
// Define CLI arguments as tasks
scheduler.addTask("task1", () -> {
System.out.println("Executing task1...");
});
scheduler.addTask("task2", () -> {
System.out.println("Executing task2...");
});
// Schedule tasks with a delay
scheduler.scheduleTask("task1", 2, TimeUnit.SECONDS);
scheduler.scheduleTask("task2", 5, TimeUnit.SECONDS);
// Simulate manual override
Thread.sleep(3000); // Wait for task1 to start
System.out.println("Overriding task2 schedule...");
scheduler.overrideSchedule("task2", 1, TimeUnit.SECOND);
Thread.sleep(6000); // Wait for task2 to complete or override
scheduler.shutdown();
}
}
Add your comment