`
zzzzzz5530041
  • 浏览: 32841 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

java 生产消费者

    博客分类:
  • java
 
阅读更多
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();
		}
	}
}


分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics