1. import java.util.LinkedList;
  2. import java.util.Queue;
  3. import java.util.concurrent.atomic.AtomicInteger;
  4. public class MaintenanceQueue {
  5. private final Queue<String> queue;
  6. private final int maxQueueSize;
  7. private final AtomicInteger taskCount = new AtomicInteger(0);
  8. private final boolean dryRun;
  9. public MaintenanceQueue(int maxQueueSize, boolean dryRun) {
  10. this.maxQueueSize = maxQueueSize;
  11. this.queue = new LinkedList<>();
  12. this.dryRun = dryRun;
  13. }
  14. public synchronized void enqueue(String task) {
  15. if (dryRun) {
  16. System.out.println("[DRY RUN] Enqueuing: " + task);
  17. return;
  18. }
  19. if (queue.size() >= maxQueueSize) {
  20. System.out.println("[Queue Full] Task discarded: " + task);
  21. return;
  22. }
  23. queue.offer(task);
  24. System.out.println("Enqueued: " + task + ", Queue size: " + queue.size());
  25. }
  26. public synchronized String dequeue() {
  27. if (dryRun) {
  28. System.out.println("[DRY RUN] Dequeuing: " + queue.poll());
  29. return null;
  30. }
  31. return queue.poll();
  32. }
  33. public synchronized int size() {
  34. return queue.size();
  35. }
  36. public synchronized boolean isEmpty() {
  37. return queue.isEmpty();
  38. }
  39. public synchronized int getTaskCount() {
  40. return taskCount.get();
  41. }
  42. public static void main(String[] args) {
  43. // Example Usage:
  44. MaintenanceQueue queue = new MaintenanceQueue(5, true); // Dry run mode enabled
  45. queue.enqueue("Task 1");
  46. queue.enqueue("Task 2");
  47. queue.enqueue("Task 3");
  48. queue.enqueue("Task 4");
  49. queue.enqueue("Task 5");
  50. queue.enqueue("Task 6"); // Will be discarded due to max size
  51. System.out.println("Queue size: " + queue.size());
  52. while (!queue.isEmpty()) {
  53. String task = queue.dequeue();
  54. System.out.println("Processing: " + task);
  55. }
  56. System.out.println("Queue is empty");
  57. MaintenanceQueue queue2 = new MaintenanceQueue(3, false); //Normal mode
  58. queue2.enqueue("Task A");
  59. queue2.enqueue("Task B");
  60. queue2.enqueue("Task C");
  61. queue2.enqueue("Task D"); //Will be discarded
  62. }
  63. }

Add your comment