用java写一个消息队列
时间: 2024-05-29 12:04:28 浏览: 125
SpringBoot中利用Redis实现消息队列,代码亲测可用, 可以传输字符串,或java对象都可以
以下是一个简单的Java消息队列的实现:
```
import java.util.LinkedList;
public class MessageQueue {
private LinkedList<Object> queue;
public MessageQueue() {
queue = new LinkedList<>();
}
public synchronized void sendMessage(Object message) {
queue.addLast(message);
notify();
}
public synchronized Object receiveMessage() throws InterruptedException {
while (queue.isEmpty()) {
wait();
}
return queue.removeFirst();
}
}
```
此消息队列使用LinkedList作为底层实现。sendMessage方法向队列末尾添加消息,receiveMessage方法从队列头部删除消息并返回,如果队列为空则阻塞等待直到有消息可用。
在使用时,可以创建一个MessageQueue对象,并在多个线程中使用sendMessage和receiveMessage方法来发送和接收消息。例如:
```
public class Test {
public static void main(String[] args) {
MessageQueue queue = new MessageQueue();
Thread producer = new Thread(() -> {
for (int i = 0; i < 10; i++) {
queue.sendMessage("Message " + i);
}
});
Thread consumer = new Thread(() -> {
for (int i = 0; i < 10; i++) {
try {
Object message = queue.receiveMessage();
System.out.println("Received message: " + message);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
producer.start();
consumer.start();
}
}
```
此示例创建了一个生产者线程和一个消费者线程,生产者向消息队列中发送10个消息,消费者从消息队列中接收10个消息并输出。由于使用了同步机制,生产者和消费者线程可以安全地访问共享的消息队列。
阅读全文