public class MyThread {
static int i;
public static void main(String[] args) {
TickOffice t = new TickOffice();
Thread t1 = new Thread(new Produce(t));
t1.setName("售票点1");
t1.start();
Thread t2 = new Thread(new Consumer(t));
t2.setName("售票点2");
t2.start();
Thread t3 = new Thread(new Consumer(t));
t3.setName("售票点3");
t3.start();
Thread t4 = new Thread(new Consumer(t));
t4.setName("售票点4");
t4.start();
}
}
class TickOffice {
private int ticket = 0;
private ArrayBlockingQueue<Integer> queue = new ArrayBlockingQueue<>(15); //存放5张票的阻塞队列
public synchronized void add(){
if(this.queue.size()>=15){
System.out.println("仓库已满");
try {
this.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}else {
ticket += 1;
try {
queue.put(ticket);
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("产生第"+ticket+"张票");
this.notifyAll();
}
}
public synchronized void get(){
if(this.queue.size()<=0){
System.out.println("缺票等待中");
try {
this.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}else {
System.out.println(Thread.currentThread().getName()+"售出第"+queue.poll()+"张票");
this.notifyAll();
}
}
}
class Produce implements Runnable{
private TickOffice off;
public Produce(TickOffice off) {
this.off = off;
}
@Override
public void run() {
System.out.println("开张");
while (true) {
off.add();
}
}
}
class Consumer implements Runnable{
private TickOffice off;
public Consumer(TickOffice off) {
this.off = off;
}
@Override
public void run() {
System.out.println("消费者开始取走产品");
while(true){
off.get();
}
}
}
相关文章
- 通过RabbitMQ的DIRECT模式以及死信队列实现延时任务
- c#实现生产者消费者模式
- BlockingQueue阻塞队列和生产者-消费者模式
- RabbitMQ 优点和缺点- 消息可靠性:RabbitMQ 提供了持久化功能和消息确认机制,确保消息在各种情况下都能可靠地存储和处理。 灵活的路由:通过多种交换机类型和绑定规则,RabbitMQ 能够灵活地路由消息到指定的队列。 支持多种消息协议:实现了 AMQP 等(MQTT、STOMP)标准化、开放的消息队列协议,使其能够与多种语言编写的应用程序进行通信。 插件化扩展:RabbitMQ 提供了丰富的插件系统,可以通过插件扩展功能,如死信队列、压缩、追踪等。 高可用性:支持集群模式和镜像队列,确保服务的可用性 易用性和可管理性:提供了丰富的 API 和管理工具,以及多种客户端库和框架支持,易于集成和使用。 多语言支持:RabbitMQ 支持多种编程语言的客户端,包括 Java、Python、Ruby、C#、Node.js 等,方便开发人员集成到各种应用中。 高性能:在处理大量并发消息时表现出色。 广泛的社区支持:拥有庞大的开发者社区和丰富的文档资源。 劣势: 性能和吞吐量较低:相比于 Apache Kafka 等面向大数据流处理的消息队列系统,RabbitMQ 的吞吐量较低,不适合处理海量的实时数据流。RabbitMQ 的设计更注重消息的可靠性和灵活性,而非极高的吞吐性能。
- Java实现多线程生产者消费者模式的两种方法
- .net学习之多线程、线程死锁、线程通信 生产者消费者模式、委托的简单使用、GDI(图形设计接口)常用的方法
- Java多线程—阻塞队列和生产者-消费者模式
- java 多线程并发系列之 生产者消费者模式的两种实现
- Kafka消息队列介绍、环境搭建及应用:C#实现消费者-生产者订阅
- LabVIEW之生产者/消费者模式--队列操作