import java.util.LinkedList;
import java.util.Queue;
import java.util.concurrent.atomic.AtomicInteger;
public class MaintenanceQueue {
private final Queue<String> queue;
private final int maxQueueSize;
private final AtomicInteger taskCount = new AtomicInteger(0);
private final boolean dryRun;
public MaintenanceQueue(int maxQueueSize, boolean dryRun) {
this.maxQueueSize = maxQueueSize;
this.queue = new LinkedList<>();
this.dryRun = dryRun;
}
public synchronized void enqueue(String task) {
if (dryRun) {
System.out.println("[DRY RUN] Enqueuing: " + task);
return;
}
if (queue.size() >= maxQueueSize) {
System.out.println("[Queue Full] Task discarded: " + task);
return;
}
queue.offer(task);
System.out.println("Enqueued: " + task + ", Queue size: " + queue.size());
}
public synchronized String dequeue() {
if (dryRun) {
System.out.println("[DRY RUN] Dequeuing: " + queue.poll());
return null;
}
return queue.poll();
}
public synchronized int size() {
return queue.size();
}
public synchronized boolean isEmpty() {
return queue.isEmpty();
}
public synchronized int getTaskCount() {
return taskCount.get();
}
public static void main(String[] args) {
// Example Usage:
MaintenanceQueue queue = new MaintenanceQueue(5, true); // Dry run mode enabled
queue.enqueue("Task 1");
queue.enqueue("Task 2");
queue.enqueue("Task 3");
queue.enqueue("Task 4");
queue.enqueue("Task 5");
queue.enqueue("Task 6"); // Will be discarded due to max size
System.out.println("Queue size: " + queue.size());
while (!queue.isEmpty()) {
String task = queue.dequeue();
System.out.println("Processing: " + task);
}
System.out.println("Queue is empty");
MaintenanceQueue queue2 = new MaintenanceQueue(3, false); //Normal mode
queue2.enqueue("Task A");
queue2.enqueue("Task B");
queue2.enqueue("Task C");
queue2.enqueue("Task D"); //Will be discarded
}
}
Add your comment