import java.util.concurrent.ConcurrentLinkedQueue;
ConcurrentLinkedQueue<String> messageQueue = new ConcurrentLinkedQueue<>();
public class Producer implements Runnable {
private ConcurrentLinkedQueue<String> messageQueue;
public Producer(ConcurrentLinkedQueue<String> messageQueue) {
this.messageQueue = messageQueue;
}
@Override
public void run() {
String message = generateMessage();
messageQueue.add(message);
}
private String generateMessage() {
return "Hello, World!";
}
}
public class Consumer implements Runnable {
private ConcurrentLinkedQueue<String> messageQueue;
public Consumer(ConcurrentLinkedQueue<String> messageQueue) {
this.messageQueue = messageQueue;
}
@Override
public void run() {
String message = messageQueue.poll();
processMessage(message);
}
private void processMessage(String message) {
System.out.println("Received message: " + message);
}
}
public class Main {
public static void main(String[] args) {
ConcurrentLinkedQueue<String> messageQueue = new ConcurrentLinkedQueue<>();
Thread producerThread = new Thread(new Producer(messageQueue));
Thread consumerThread = new Thread(new Consumer(messageQueue));
producerThread.start();
consumerThread.start();
}
}