import java.util.concurrent.ConcurrentLinkedQueue;
class Producer implements Runnable {
private ConcurrentLinkedQueue<String> queue;
public Producer(ConcurrentLinkedQueue<String> queue) {
this.queue = queue;
}
public void run() {
for (int i = 0; i < 10; i++) {
String message = "Message " + i;
queue.add(message);
System.out.println("Produced: " + message);
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
class Consumer implements Runnable {
private ConcurrentLinkedQueue<String> queue;
public Consumer(ConcurrentLinkedQueue<String> queue) {
this.queue = queue;
}
public void run() {
while (true) {
if (!queue.isEmpty()) {
String message = queue.poll();
System.out.println("Consumed: " + message);
}
}
}
}
public class Main {
public static void main(String[] args) {
ConcurrentLinkedQueue<String> queue = new ConcurrentLinkedQueue<>();
Thread producerThread = new Thread(new Producer(queue));
Thread consumerThread = new Thread(new Consumer(queue));
producerThread.start();
consumerThread.start();
}
}