zoukankan      html  css  js  c++  java
  • java生产者消费者模式代码示例

    package test;
    
    import java.util.LinkedList;
    
    public class Test {
    	
    	
    	public static void main(String[] args) {
    		R r = new R();
    		P p1 = new P(r,10);
    		P p2 = new P(r,20);
    		P p3 = new P(r,30);
    		P p4 = new P(r,40);
    		P p5 = new P(r,50);
    		
    		C c1 = new C(r,10);
    		C c2 = new C(r,20);
    		C c3 = new C(r,30);
    		C c4 = new C(r,40);
    		C c5 = new C(r,50);
    		
    		new Thread(p1).start();
    		new Thread(c1).start();
    		
    
    		new Thread(p2).start();
    		new Thread(c2).start();
    		
    
    		new Thread(p3).start();
    		new Thread(c3).start();
    		
    
    		new Thread(p4).start();
    		new Thread(c4).start();
    		
    
    		new Thread(p5).start();
    		new Thread(c5).start();
    	}
    	
    	
    	
    }
    
    
    class P implements Runnable{
    	private R r;
    	private int n;
    	public P(R _r,int _n){
    		this.r = _r;
    		this.n = _n;
    	}
    	@Override
    	public void run() {
    		r.push(n);
    	}
    }
    
    
    class C implements Runnable{
    	private R r;
    	private int n;
    	public C(R _r,int _n){
    		this.r = _r;
    		this.n = _n;
    	}
    	@Override
    	public void run() {
    		r.pop(n);
    	}
    }
    
    
    
    class R {
    	private LinkedList<Object> c = new LinkedList<Object>();
    	private static final int MAX_SIZE = 100;
    	public void push(int n){
    		synchronized (c) {
    			if(c.size()+n <= MAX_SIZE){
    				for(int i=0;i<n;i++){
    					c.add(new Object());
    				}
    				System.out.println("生产者:生产了"+n+"个产品,现在一共有"+c.size()+"个产品,并唤醒消费者线程控可以消费了!!!!!!!");
    				c.notifyAll();
    			}else{
    				System.out.println("生产者:要生产的产品个数:"+n+",大于仓库剩余空间"+(MAX_SIZE-c.size())+"当前生产者线程进入等待状态。。。。。。。。。。");
    				try {
    					c.wait();
    				} catch (InterruptedException e) {
    					e.printStackTrace();
    				}
    			}
    		}
    	}
    	
    	public void pop(int n){
    		synchronized (c) {
    			if(n <= c.size()){
    				for(int i=0;i<n;i++){
    					c.remove();
    				}
    				System.out.println("消费者:消费了"+n+"个产品,现在还剩下"+c.size()+"个产品,并唤醒生产者线程控可以生产了!!!!!!!");
    				c.notifyAll();
    			}else{
    				System.out.println("消费者:要消费的产品个数:"+n+",大于仓库剩余产品个数"+c.size()+"当前消费者线程进入等待状态。。。。。。。。。。");
    				try {
    					c.wait();
    				} catch (InterruptedException e) {
    					e.printStackTrace();
    				}
    			}
    		}
    	}
    }

  • 相关阅读:
    cocos2d-js 写日志log 查看日志log Android调试查看log
    嵌入式开发之hi3519---网络不通问题rmii
    嵌入式开发之视频压缩比---h264、mjpeg、mpeg4
    c、c++---linux上的GetTickCount函数
    嵌入式开发之hi3516---GV7601 SPI通信问题
    嵌入式开发之hisilicon---hi3536 处理器简介
    嵌入式开发之zynq---Zynq PS侧I2C驱动架构
    嵌入式开发值zynq---zynq中tlv320aic23b spi的驱动移植
    jumpserver 3.2修改排序规则
    haproxy 非常完整的配置
  • 原文地址:https://www.cnblogs.com/iamconan/p/7383528.html
Copyright © 2011-2022 走看看