转自论坛 http://www.iteye.com/topic/1132202
题目:
编写一段生产者/消费者的Java代码,其中生产者每次生产1个0到1000之间的随机数,消费者则把该随机数打印出来。如果产生的随机数为0,则生产者、消费者均退出运行。要求生产者、消费者均使用线程来实现。如题,线程基本的我也会,但是像这样有点复杂的还真不会,求大家帮我啊
给出一个更贴近考题细节的答案。
几点注意: 1. 消费生产者模式原则上讲究生产一个产品后就不能再生产,要等消费完才能生产第二个。因此可以选用SynchronousQueue。当然广义上的消费生产者,用BlockingQueue旗下的任意一个实现类都可以。
2.逻辑很简单,一个线程往queue里存(put),一个线程从queue里取(take)。put和take都是阻塞型的方法,防止while循环死命的循环下去。
3. 随机出0后,producer和consumer都必须停止,如果不用threadpool工具来做,单纯用thread来实现,就要注意,让thread在合适的时候return。比如生产者随机到0时,return并且依然把0存入queue,消费者取出0时,线程return。
import java.util.Random;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.SynchronousQueue;
public class Test {
BlockingQueue<Integer> queue = new SynchronousQueue<Integer>();
Random rd = new Random();
class Producer extends Thread {
@Override
public void run() {
while (true) {
int number = rd.nextInt(1000);
System.out.println("Producer Generate : " + number);
try {
queue.put(number);
if (number == 0) {
System.out.println("Producer stoped.");
return;
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
class Consumer extends Thread {
@Override
public void run() {
while (true) {
try {
if (queue.take() == 0) {
System.out.println("Consumer stoped.");
return;
}
;
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
public void startTest() {
Producer producer = new Producer();
Consumer consumer = new Consumer();
producer.start();
consumer.start();
}
public static void main(String[] args) {
new Test().startTest();
}
}
分享到:
相关推荐
java生产者消费者问题 java生产者消费者问题 java生产者消费者问题 java生产者消费者问题 java生产者消费者问题
java的生产者消费者,thread生产者消费者、。。。。。。
java 生产者消费者问题(源码) java 生产者消费者问题(源码)
Java生产者与消费者Demo
java实现生产者消费者,生产者先生产,然后通知消费者消费,然后再通知生产者生产
java生产者消费者模型
//下面的消费者类对象和生产者类对象所操作的是同一个同步堆栈对象 Producer p1 = new Producer(stack,ce); new Thread(p1).start();//生产者线程启动 Consumer c1 = new Consumer(stack,ce); new Thread(c1)....
生产者消费者问题 Java实现 线程同步 线程通信生产者消费者问题 Java实现 线程同步 线程通信生产者消费者问题 Java实现 线程同步 线程通信
java多线程实现生产者和消费者
生产者/消费者问题的多种Java实现方式。采用适配器模式架构完成三种方式的实现。demo清晰明了
编写一个“生产者-消费者”的多线程演示程序,两个生产者,一个消费者,可以存放产品的仓库容量为10,仓库用栈实现,并有同步功能,且能防止先消费后生产的情况。
java实现生产者消费者问题,实验报告,很好的参考材料
自己空闲时间写的一个生产者和消费者模式。中间使用了中介者设计模式。大家可以参考下。
基本满足操作系统课上要求,java实现的生产者消费者模型。
设计目的:通过研究Linux 的进程机制和信号量实现生产者消费者问题的并发控制。说明:有界缓冲区内设有20 个存储单元,放入/取出的数据项设定为1‐20 这20 个整型数。设计要求:1)每个生产者和消费者对有界缓冲区...
Java SE程序 生产者+消费者Java SE程序 生产者+消费者Java SE程序 生产者+消费者Java SE程序 生产者+消费者Java SE程序 生产者+消费者Java SE程序 生产者+消费者Java SE程序 生产者+消费者Java SE程序 生产者+消费者...
以车库为例子,一组生产者向一组消费者提供消息,它们共享一个有界缓冲池,生产者向其中投放消息,消费者从中取得消息。 根据进程同步机制,编写一个解决上述问题的可视化程序,可显示缓冲池状态、放数据、取数据等...
java多线程经典模型生产者消费者java多线程经典模型生产者消费者java多线程经典模型生产者消费者java多线程经典模型生产者消费者java多线程经典模型生产者消费者java多线程经典模型生产者消费者java多线程经典模型...
关于Java中的生产者和消费者问题,有关于线程的哦
本代码是用JAVA实现的生产者与消费者的问题,线程间的同步与互斥功能