Java实现生产者与消费者

生产者与消费者的线程实现问题分析可知:问题含有产品对象,产品池对象,消费者,生产者对象

产品对象

public class Product {
	int id;
	String name;
	Product(){}
	Product(int id,String name){
		this.name=name;
		this.id=id;
	}
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}

}
产品池对象

public class Container {
	ArrayList<Product> products = new ArrayList<Product>();
	int max=10;
	public synchronized void push(Product product) {
		if(products.size()==max){
			notify();
		     System.out.println("产品富足,等待消费");
		     try {
				wait();
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
		products.add(product);
		notify();
	}
	public synchronized Product pop() {
		if(products.size()==0){
		     System.out.println("产品匮乏,等待生产");
		     try {
				wait();
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
		Product product=products.get(products.size()-1);
		products.remove(products.size()-1);
		notify();
		return product;
	}
	

}

消费者
public class Consumer implements Runnable {
	  private String consumerName;  
	    //保留有缓冲区对象的引用,以便消费产品  
	    private Container container;  
	      
	    public Consumer(String consumerName, Container container) {  
	        this.consumerName = consumerName;  
	        this.container = container;  
	    }  
	  
	    public void run() {  
	        while(true){  
	            System.out.println("消费者"+consumerName+"已经消费"+container.pop());  
	            try {  
	                Thread.sleep(2000);  
	            } catch (InterruptedException e) {  
	                e.printStackTrace();  
	            }  
	        }  
	  
	    }  
}
生产者
public class Producter implements Runnable{
	private String producterName;  
	  
    //  保留有缓冲区对象的引用,以便将生产的产品放入缓冲区  
    private Container container;  
      
    public Producter(String producterName, Container container) {  
        this.producterName = producterName;  
        this.container = container;  
    }  
    public void producterProduct(){  
        //生产产品,并放入到仓库中  
        int i=0;  
        while(true){  
            i++;  
            Product product=new Product(i,"新产品");  
            container.push(product);  
            System.out.println(producterName+"生产了");  
            try {  
                Thread.sleep(2000);  
            } catch (InterruptedException e) {  
                return;  
            }  
        }  
    }
	public void run() {
		producterProduct();		
	}  
  
}
调用函数
public class Main {
public static void main(String[] args) {
	Container container=new Container();
	Consumer con=new Consumer("消费", container);
	Producter producter=new Producter("新产品",container);
	Thread t1=new Thread(con);
	Thread t2=new Thread(producter);
	t1.start();
	t2.start();
}
}





  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值