public class MessageQueue {
private List<String> queue = new ArrayList<String>();
public synchronized String getMessage() throws InterruptedException {
while (queue.isEmpty()) {
wait();
}
String message = queue.remove(0);
notify();
return message;
}
public synchronized void putMessage(String message) throws InterruptedException {
if (!queue.isEmpty()) {
wait();
}
queue.add(message);
notify();
}
public static void main(String[] args) {
MessageQueue queue = new MessageQueue();
new Thread(new MessageProducer("生产者1", queue)).start();
new Thread(new MessageProducer("生产者2", queue)).start();
new Thread(new MessageConsumer("消费者1", queue)).start();
new Thread(new MessageConsumer("消费者2", queue)).start();
new Thread(new MessageConsumer("消费者3", queue)).start();
new Thread(new MessageConsumer("消费者4", queue)).start();
new Thread(new MessageConsumer("消费者5", queue)).start();
new Thread(new MessageConsumer("消费者6", queue)).start();
}
}
public class MessageProducer implements Runnable {
private MessageQueue queue;
private String name;
public MessageProducer(String name, MessageQueue queue) {
super();
this.queue = queue;
this.name = name;
}
@Override
public void run() {
int i = 0;
while (i < 20) {
i++;
try {
try {
Thread.sleep((long) (Math.random() * 1000));
}
catch (InterruptedException e) {
e.printStackTrace();
}
queue.putMessage("***" + name + "*** 生产了 第 " + i + " 消息!");
}
catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
public class MessageConsumer implements Runnable {
private MessageQueue queue;
private String name;
public MessageConsumer(String name, MessageQueue queue) {
this.queue = queue;
this.name = name;
}
@Override
public void run() {
try {
while (true) {
try {
Thread.sleep((long) (Math.random() * 1000));
}
catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(name + "==>读取消息:" + queue.getMessage());
}
}
catch (InterruptedException e) {
e.printStackTrace();
}
}
}
分享到:
相关推荐
java实现多线程经典模型生产者消费java实现多线程经典模型生产者消费java实现多线程经典模型生产者消费java实现多线程经典模型生产者消费java实现多线程经典模型生产者消费java实现多线程经典模型生产者消费java实现...
java多线程经典模型生产者消费者java多线程经典模型生产者消费者java多线程经典模型生产者消费者java多线程经典模型生产者消费者java多线程经典模型生产者消费者java多线程经典模型生产者消费者java多线程经典模型...
java生产者消费者模型
基本满足操作系统课上要求,java实现的生产者消费者模型。
生产者消费者模型,是一般面试题都会考的,下面介绍使用ReetrantLock实现 生产者消费者模型。 定义一个ReentrantLock锁,同时new出两个condition,一个控制队满,一个 控制队空 //生产者 消费者 import java.util....
设计目的:通过研究Linux 的进程机制和信号量实现生产者消费者问题的并发控制。说明:有界缓冲区内设有20 个存储单元,放入/取出的数据项设定为1‐20 这20 个整型数。设计要求:1)每个生产者和消费者对有界缓冲区...
使用wait()和notify()实现的生产者与消费者模型,可以了解如何使用wait()和notify()进行线程间通信。(上一次上传的代码有一个问题没有考虑到,这次修补了——CSDN没法撤销资源,只能再上传了)
java 多线程生产者消费者模型demo
以车库为例子,一组生产者向一组消费者提供消息,它们共享一个有界缓冲池,生产者向其中投放消息,消费者从中取得消息。 根据进程同步机制,编写一个解决上述问题的可视化程序,可显示缓冲池状态、放数据、取数据等...
自己用Java写的简单生产者与消费者模型
java多线程_消费者与生产者模型
操作系统,生产者消费者问题和先来先服务算法,java语言编写。
理解java中生产者消费者模型,以及如何利用双缓冲机制来解决同步与死锁问题。
利用线程间的通信主要是因为当多个线程同时对一个对象进行访问的时候,多个线程之间是一个协助的关系,举个例子就是今天要说的生产这和消费者模型。
java 课程设计 生产者消费者图形界面模拟 swing模拟单个生产者单个消费者 多个生产者多个消费者
主要介绍了Java实现简易生产者消费者模型过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
使用Java完成的生产者消费者模型,适合初学者对线程进行深入理解使用,本代码仅用于学习交流,祝各位学习顺利!
所谓的生产者消费者模型,是通过一个容器来解决生产者和消费者的强耦合问题。通俗的讲,就是生产者在不断的生产,消费者也在不断的消费,可是消费者消费的产品是生产者生产的,这就必然存在一个中间容器,我们可以把...
消息分发框架,基于java阻塞队列实现,生产者消费者模型 可用于任务分发,服务器消息消息,以及网络IO 性能优化,多线程