编写一个队列,生产者生产消息(消息内容是1,2,3,…,n),消费者消费消息,并将消息打印到控制台。
要求:
1.生产者以每秒10个的速率生产消息,队列满了后阻塞等待;
2.队列长度为100;
3.消费者以每秒1个的速率消费消息;
生产者和消费者在不同的线程;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.LinkedBlockingQueue;
class Producer implements Runnable {
private final BlockingQueueInteger> queue;
public Producer(BlockingQueueInteger> queue) {
this.queue = queue;
}
服务器托管网
@Override
public void run() {
try {
for (int i = 1; i 1000; i++) {
synchronized (this) {
while (i > queue.remainingCapacity()) {
wait();
}
}
queue.put(i);
System.out.println("Produced: " + i);
Thread.sleep(100); // 生产者以每秒10个的速率生产消息
notifyAll();
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
class Consumer implements Runnable {
private final BlockingQueueInteger> queue;
public Consumer(BlockingQueueInteger> queue) {
this.queue = queue;
}
@Override
public void run() {
try {
服务器托管网 while (true) {
Integer i = queue.take();
System.out.println("Consumed: " + i);
Thread.sleep(1000); // 消费者以每秒1个的速率消费消息
notifyAll();
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public class Main {
public static void main(String[] args) {
BlockingQueueInteger> queue = new LinkedBlockingQueue>(100); // 队列长度为100
Producer producer = new Producer(queue);
Consumer consumer = new Consumer(queue);
new Thread(producer).start(); // 启动生产者线程
new Thread(consumer).start(); // 启动消费者线程
}
}
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
相关推荐: 运维平台 WGCLOUD v3.4.9 支持配置告警恢复通知脚本
WGCLOUD在v3.4.9版本 新增一个特性 就是可以配置告警恢复脚本,这样如果有恢复通知,就会通过这个脚本发送。告警通知还是通过告警脚本来发送 这样可以更好的区分处理告警消息 告警恢复脚本不是必须配置的,如果配置了告警恢复脚本,那么此脚本只会发送恢复通知,…