package com.zhuyang.test.consumer;
import java.util.ArrayList;
import java.util.List;
public class Queue {
private List<Product> queue =new ArrayList<Product>();
private int maxCount=5;
public synchronized void produce(Product product){
this.notifyAll();
while(queue.size()==maxCount){
System.err.println(Thread.currentThread().getName()+",product is full,wait,current count is "+getCount());
try {
this.wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
queue.add(product);
System.out.println(Thread.currentThread().getName()+"we are produce product, current count is "+getCount());
}
public synchronized void consume(){
this.notifyAll();
while(queue.size()==0){
System.err.println(Thread.currentThread().getName()+",product is empty,wait,current count is "+getCount());
try {
this.wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
Product product =queue.get(0);
queue.remove(product);
System.out.println(Thread.currentThread().getName()+" is consuming ,product name ==="+product.getName()+",current count is "+getCount());
}
public synchronized int getCount(){
return queue.size();
}
}
package com.zhuyang.test.consumer;
public class Test {
public static void main(String[] args) {
Queue queue=new Queue();
Producer p1=new Producer(queue);
Producer p2=new Producer(queue);
Producer p3=new Producer(queue);
Producer p4=new Producer(queue);
Consumer c1=new Consumer(queue);
Consumer c2=new Consumer(queue);
Consumer c3=new Consumer(queue);
Consumer c4=new Consumer(queue);
Thread pt1=new Thread(p1);
Thread pt2=new Thread(p2);
Thread pt3=new Thread(p3);
Thread pt4=new Thread(p4);
Thread ct1=new Thread(c1);
Thread ct2=new Thread(c2);
Thread ct3=new Thread(c3);
Thread ct4=new Thread(c4);
ct1.start();
ct2.start();
ct3.start();
ct4.start();
pt3.start();
pt4.start();
}
}
class Producer extends Thread{
private Queue queue;
public Producer(Queue queue){
this.queue=queue;
}
@Override
public void run() {
// TODO Auto-generated method stub
for(int i=0;i<100;i++){
Product p=new Product();
p.setName("name "+i);
queue.produce(p);
}
}
}
class Consumer extends Thread{
private Queue queue;
public Consumer(Queue queue){
this.queue=queue;
}
@Override
public void run() {
// TODO Auto-generated method stub
for(int i=0;i<100;i++){
queue.consume();
}
}
}
分享到:
相关推荐
Java 生产消费者模式练习demo,供初学者入门。资深工程师请绕路。
java生产者消费者问题 java生产者消费者问题 java生产者消费者问题 java生产者消费者问题 java生产者消费者问题
java的生产者消费者,thread生产者消费者、。。。。。。
Java JDK1.5后新特性,用Lock和Condtion对象解决线程安全问题,提高了效率。
java 生产者消费者问题(源码) java 生产者消费者问题(源码)
Java生产者与消费者Demo
//下面的消费者类对象和生产者类对象所操作的是同一个同步堆栈对象 Producer p1 = new Producer(stack,ce); new Thread(p1).start();//生产者线程启动 Consumer c1 = new Consumer(stack,ce); new Thread(c1)....
java实现生产者消费者,生产者先生产,然后通知消费者消费,然后再通知生产者生产
java多线程实现生产者和消费者
java生产者消费者模型
生产者/消费者问题的多种Java实现方式。采用适配器模式架构完成三种方式的实现。demo清晰明了
生产者消费者问题 Java实现 线程同步 线程通信生产者消费者问题 Java实现 线程同步 线程通信生产者消费者问题 Java实现 线程同步 线程通信
Java SE程序 生产者+消费者Java SE程序 生产者+消费者Java SE程序 生产者+消费者Java SE程序 生产者+消费者Java SE程序 生产者+消费者Java SE程序 生产者+消费者Java SE程序 生产者+消费者Java SE程序 生产者+消费者...
编写一个“生产者-消费者”的多线程演示程序,两个生产者,一个消费者,可以存放产品的仓库容量为10,仓库用栈实现,并有同步功能,且能防止先消费后生产的情况。
用java模拟生产者和消费者在缓冲区间的阻塞情况。
java实现生产者消费者问题,实验报告,很好的参考材料
基本满足操作系统课上要求,java实现的生产者消费者模型。
设计目的:通过研究Linux 的进程机制和信号量实现生产者消费者问题的并发控制。说明:有界缓冲区内设有20 个存储单元,放入/取出的数据项设定为1‐20 这20 个整型数。设计要求:1)每个生产者和消费者对有界缓冲区...
java生成者与消费者实验报告内含封面代码和截图
自己空闲时间写的一个生产者和消费者模式。中间使用了中介者设计模式。大家可以参考下。