zoukankan      html  css  js  c++  java
  • 生产者消费者模式

    生产者消费者模式见上图所看到的。

    blog宗旨:用图说话。


    代码演示样例:

    package com.huan;
    
    
    public class ProduceConsumer {
    	public static void main(String[] args) {
    		Middleware middleware = new Middleware();
    		
    		new Thread(new Producer(middleware)).start();
    		
    		new Thread(new Consumer(middleware)).start();
    	}
    }
    
    class Producer implements Runnable{
    	private Middleware middleware;
    	public Producer(Middleware middleware){
    		this.middleware = middleware;
    	}
    	
    	public void produce() throws Exception{
    		while(true){
    			middleware.put();
    		}
    	}
    
    	@Override
    	public void run() {
    		try {
    			produce();
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    	}
    }
    
    class Consumer implements Runnable{
    	private Middleware middleware;
    	public Consumer(Middleware middleware){
    		this.middleware = middleware;
    	}
    	
    	public void consume() throws Exception{
    		while(true){
    			middleware.get();
    		}
    	}
    
    	@Override
    	public void run() {
    		try {
    			consume();
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    	}
    }
    
    class Middleware{
    	private static final int MAX_SIZE = 10;
    	private int[] storage = new int[MAX_SIZE];
    	private int index = 0;
    	
    	public synchronized void put() throws Exception{
    		if(index == MAX_SIZE){
    			wait();
    		}
    		storage[index] = index;
    		System.out.println("生产了:" + index);
    		index++;
    		notify();
    	}
    	
    	public synchronized void get() throws Exception{
    		if(index == 0){
    			wait();
    		}
    		index--;
    		System.out.println("消费了:" + storage[index]);
    		notify();
    	}
    }
    

    代码缺陷:当多个消费者时,或者多个生产者时,上例代码须要完好。


  • 相关阅读:
    Codeforces 691A Fashion in Berland
    HDU 5741 Helter Skelter
    HDU 5735 Born Slippy
    HDU 5739 Fantasia
    HDU 5738 Eureka
    HDU 5734 Acperience
    HDU 5742 It's All In The Mind
    POJ Euro Efficiency 1252
    AtCoder Beginner Contest 067 C
    AtCoder Beginner Contest 067 D
  • 原文地址:https://www.cnblogs.com/wgwyanfs/p/7372826.html
Copyright © 2011-2022 走看看