// Java消息队列示例代码
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;
public class MessageQueueExample {
// 创建一个容量为10的消息队列
private static BlockingQueue<String> messageQueue = new ArrayBlockingQueue<>(10);
public static void main(String[] args) {
// 启动生产者线程
Thread producerThread = new Thread(new Producer());
producerThread.start();
// 启动消费者线程
Thread consumerThread = new Thread(new Consumer());
consumerThread.start();
}
// 生产者类,负责向队列中添加消息
static class Producer implements Runnable {
@Override
public void run() {
try {
for (int i = 0; i < 20; i++) {
String message = "Message-" + i;
System.out.println("Producing: " + message);
messageQueue.put(message); // 将消息放入队列,如果队列已满则等待
Thread.sleep(100); // 模拟生产时间
}
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
}
}
// 消费者类,负责从队列中取出消息
static class Consumer implements Runnable {
@Override
public void run() {
try {
while (true) {
String message = messageQueue.take(); // 从队列中取出消息,如果队列为空则等待
System.out.println("Consuming: " + message);
Thread.sleep(200); // 模拟消费时间
}
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
}
}
}
BlockingQueue:使用ArrayBlockingQueue实现了一个阻塞队列,它可以确保在队列满时生产者线程会等待,而在队列空时消费者线程会等待。
Producer类:实现了Runnable接口,负责向队列中添加消息。每生成一条消息后,调用messageQueue.put()方法将消息放入队列,并模拟了生产者的生产时间。
Consumer类:也实现了Runnable接口,负责从队列中取出消息。每次取出消息后,调用messageQueue.take()方法从队列中获取消息,并模拟了消费者的消费时间。
main方法:启动了两个线程,一个是生产者线程,另一个是消费者线程,分别执行生产和消费操作。
通过这种方式,可以实现简单的消息队列机制,确保生产者和消费者之间的协调工作。
上一篇:java 拼接字符串
下一篇:java字符串数组
Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3
Laravel 中文站