class Producer implements Runnable {
private String producerName = null;
private StoreHouse storeHouse = null;
public Producer(String producerName, StoreHouse storeHouse) {
this.producerName = producerName;
this.storeHouse = storeHouse;
}
public void setProducerName(String producerName) {
this.producerName = producerName;
}
public String getProducerName() {
return producerName;
}
public void produceProduct() {
int i = 0;
while (true) {
i++;
Product pro = new Product(i);
storeHouse.push(pro);
System.out.println(getProducerName() + " 生产了 " + pro);
try {
Thread.sleep(400);
} catch (InterruptedException e) {
return;
}
}
}
public void run() {
produceProduct();
}
}
class Consumer implements Runnable {
private String consumerName = null;
private StoreHouse storeHouse = null;
public Consumer(String consumerName, StoreHouse storeHouse) {
this.consumerName = consumerName;
this.storeHouse = storeHouse;
}
public void setConsumerName(String consumerName) {
this.consumerName = consumerName;
}
public String getConsumerName() {
return consumerName;
}
public void consumerProduct() {
while (true) {
System.out.println(getConsumerName() + " 消费了 " + storeHouse.pop());
try {
Thread.sleep(500);
} catch (InterruptedException e) {
return;
}
}
}
public void run() {
consumerProduct();
}
}
class Product {
private int productId = 0;
public Product(int productId) {
this.productId = productId;
}
public int getProductId() {
return productId;
}
public String toString() {
return Integer.toString(productId);
}
}
class StoreHouse {
private int base = 0;
private int top = 0;
private Product[] products = new Product[10];
public synchronized void push(Product product) {
if (top == products.length) {
try {
System.out.println("仓库已满,正等待消费...");
wait();
} catch (InterruptedException e) {
System.out.println("stop push product because other reasons");
}
}
products[top] = product;
top++;
notify();
}
public synchronized Product pop() {
Product pro = null;
if (top == base) {
try {
System.out.println("仓库已空,正等待生产...");
wait();
} catch (InterruptedException e) {
System.out.println("stop push product because other reasons");
}
}
top--;
pro = products[top];
products[top] = null;
notify();
return pro;
}
}
public class TestPC {
public static void main(String[] args) {
StoreHouse storeHouse = new StoreHouse();
Producer producer = new Producer("生产者", storeHouse);
Consumer comsumer = new Consumer("消费者", storeHouse);
Thread t1 = new Thread(producer);
Thread t2 = new Thread(comsumer);
t1.start();
t2.start();
}
}
分享到:
相关推荐
java 生产者消费者问题(源码) java 生产者消费者问题(源码)
关于Java中的生产者和消费者问题,有关于线程的哦
java生产者消费者问题代码实现
java实现生产者消费者问题,实验报告,很好的参考材料
死锁and生产者消费者问题
java的生产者消费者,thread生产者消费者、。。。。。。
生产者消费者问题 Java实现 线程同步 线程通信生产者消费者问题 Java实现 线程同步 线程通信生产者消费者问题 Java实现 线程同步 线程通信
Java生产者与消费者Demo
设计目的:通过研究Linux 的进程机制和信号量实现生产者消费者问题的并发控制。说明:有界缓冲区内设有20 个存储单元,放入/取出的数据项设定为1‐20 这20 个整型数。设计要求:1)每个生产者和消费者对有界缓冲区...
同步锁 线程 生产者消费者问题 适合新手的线程练习
java实现生产者消费者,生产者先生产,然后通知消费者消费,然后再通知生产者生产
java生产者消费者模型
本代码是用JAVA实现的生产者与消费者的问题,线程间的同步与互斥功能
用java模拟生产者和消费者在缓冲区间的阻塞情况。
//下面的消费者类对象和生产者类对象所操作的是同一个同步堆栈对象 Producer p1 = new Producer(stack,ce); new Thread(p1).start();//生产者线程启动 Consumer c1 = new Consumer(stack,ce); new Thread(c1)....
生产者/消费者问题的多种Java实现方式。采用适配器模式架构完成三种方式的实现。demo清晰明了
java多线程实现生产者和消费者
设计目的:通过研究Linux 的进程机制和信号量实现生产者消费者问题的并发控制. 说明:有界缓冲区内设有20个存储单元,放入/取出的数据项设定为1-20这20个整型数. 设计要求:(1)每个生产者和消费者对有界缓冲区进行操作后...