1. import java.util.concurrent.*;
  2. import java.util.HashMap;
  3. import java.util.Map;
  4. public class CLIArgsScheduler {
  5. private final ExecutorService executor;
  6. private final Map<String, Runnable> tasks;
  7. private final Map<String, ScheduledFuture<?>> scheduledFutures;
  8. public CLIArgsScheduler() {
  9. this.executor = Executors.newFixedThreadPool(10); // Adjust thread pool size as needed
  10. this.tasks = new HashMap<>();
  11. this.scheduledFutures = new HashMap<>();
  12. }
  13. public void addTask(String name, Runnable task) {
  14. tasks.put(name, task);
  15. }
  16. public void scheduleTask(String name, long delay, TimeUnit unit) {
  17. ScheduledFuture<?> future = executor.schedule(tasks.get(name), delay, unit);
  18. scheduledFutures.put(name, future);
  19. }
  20. public void overrideSchedule(String name, long delay, TimeUnit unit) {
  21. // Cancel the existing scheduled task if it exists
  22. if (scheduledFutures.containsKey(name)) {
  23. scheduledFutures.get(name).cancel(true);
  24. scheduledFutures.remove(name);
  25. }
  26. // Reschedule the task
  27. scheduleTask(name, delay, unit);
  28. }
  29. public void shutdown() {
  30. executor.shutdown();
  31. }
  32. public static void main(String[] args) throws InterruptedException {
  33. CLIArgsScheduler scheduler = new CLIArgsScheduler();
  34. // Define CLI arguments as tasks
  35. scheduler.addTask("task1", () -> {
  36. System.out.println("Executing task1...");
  37. });
  38. scheduler.addTask("task2", () -> {
  39. System.out.println("Executing task2...");
  40. });
  41. // Schedule tasks with a delay
  42. scheduler.scheduleTask("task1", 2, TimeUnit.SECONDS);
  43. scheduler.scheduleTask("task2", 5, TimeUnit.SECONDS);
  44. // Simulate manual override
  45. Thread.sleep(3000); // Wait for task1 to start
  46. System.out.println("Overriding task2 schedule...");
  47. scheduler.overrideSchedule("task2", 1, TimeUnit.SECOND);
  48. Thread.sleep(6000); // Wait for task2 to complete or override
  49. scheduler.shutdown();
  50. }
  51. }

Add your comment