转自论坛 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生产者消费者demo"中,开发者使用了适配器模式来构建解决方案。适配器模式是一种设计模式,它允许不同接口的类协同工作,即使它们原本无法直接交互。在生产者消费者问题中,适配器模式可能被用来协调生产...
在Java编程中,生产者消费者模式是一种典型的多线程协作模型,用于解决系统资源供需不平衡的问题。这个模式的核心思想是将生产数据和消费数据的过程解耦,使得生产者可以独立地生产数据,而消费者可以独立地消费数据...
Java生产者消费者问题是多线程编程中的一个经典案例,它主要展示了如何通过共享资源来实现线程间的协作。这个问题源于现实生活中的生产流水线,其中生产者负责制造产品,而消费者负责消耗这些产品。在计算机系统中,...
在Java编程中,"生产者与消费者"模式是一种经典的多线程问题,它涉及到了并发处理和资源管理。这个模式的核心思想是通过共享一个有限的缓冲区,使得生产者线程可以将产品放入缓冲区,而消费者线程则可以从缓冲区取出...
这就是一个基本的Java“生产者-消费者”模型实现。通过这样的设计,我们可以有效地控制生产者和消费者的执行顺序,确保了数据的正确性,并且避免了先消费后生产的情况。在实际应用中,可能需要根据具体需求进行优化...
在并发编程中,"生产者-消费者"模式是一种经典的解决问题的范式,用于协调两个或更多线程间的协作,其中一部分线程(生产者)生成数据,另一部分线程(消费者)消费这些数据。 生产者-消费者模型的核心在于共享资源...
Java 生产者消费者演示程序 在这个示例程序中,我们可以看到的是生产者消费者模型的实现。该模型描述了一个生产者和一个消费者之间的关系,生产者生产产品,并将其存储在缓冲区中,而消费者则从缓冲区中消费产品。 ...
Java生产者消费者模型是多线程编程中一种经典的并发控制模型,它源于操作系统中的哲学思想,用于解决资源的共享和异步处理问题。在该模型中,"生产者"线程负责生成数据,而"消费者"线程则负责消费这些数据。两者之间...
在Java编程中,"生产者-消费者"模型是一种常见的多线程问题,它涉及到进程间的同步与通信。在这个模型中,生产者线程负责生成数据并放入缓冲区,而消费者线程则负责从缓冲区取出数据进行处理。这里的"车库"例子就是...
### Java生产者消费者问题知识点详解 #### 一、实验背景及意义 生产者-消费者问题是计算机科学中的一个经典问题,通常用于演示并发编程中的同步机制。这个问题涉及到如何在多个线程之间分配有限资源的问题,是多...
### Java生产者与消费者模型详解 #### 实验背景与目的 在并发编程中,生产者-消费者模式是一种经典的解决同步问题的设计模式。本实验旨在通过实际编程操作,深入理解Java中生产者与消费者模型的工作机制及其同步...
在Java编程领域,生产者消费者问题是多线程同步的一个经典示例,它源自并发编程中的一个常见场景。这个问题描述了两个角色:生产者和消费者,它们共享一个有限大小的缓冲区。生产者负责生成数据并将数据放入缓冲区,...
//下面的消费者类对象和生产者类对象所操作的是同一个同步堆栈对象 Producer p1 = new Producer(stack,ce); new Thread(p1).start();//生产者线程启动 Consumer c1 = new Consumer(stack,ce); new Thread(c1)....
在提供的压缩包文件中,`producer.java`可能是实现生产者消费者问题的Java代码示例。通常,这样的代码会包含两个主要类:一个代表生产者,另一个代表消费者。生产者类会有一个或多个方法用于生成数据并将其放入共享...
本项目通过一个生产者消费者问题的实例,展示了如何在Java中实现线程间的同步与互斥。 生产者消费者问题是经典的并发问题之一,它涉及到两个类型的线程:生产者和消费者。生产者负责生成数据(产品),而消费者则...
在生产者消费者问题的Java实现中,通常会使用一个有界缓冲区来存储数据。这个缓冲区可以用数组或`BlockingQueue`来实现。`BlockingQueue`是一个线程安全的数据结构,它内置了同步机制,可以避免死锁和资源浪费。 ...
生产者消费者模式是一种经典的多线程同步问题解决方案,在Java中有着广泛的应用。它主要用于解决系统中数据处理的并发问题,确保生产者线程与消费者线程之间的协作与数据的有序处理。这种模式遵循一个基本原理:生产...
总之,这个项目通过Java的多线程和`BlockingQueue`,实现了生产者消费者问题的直观演示,无论是在GUI界面还是命令行环境中都能运行。对于学习Java并发编程和理解线程同步机制的人来说,这是一个非常有价值的实践案例...