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();
    	}
    }
    

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


  • 相关阅读:
    nyoj 311 完全背包
    nyoj 737 石子合并(一)
    nyoj 232 How to eat more Banana
    nyoj 456 邮票分你一半
    nyoj 236 心急的C小加
    nyoj 195 飞翔
    nyoj 201 作业题
    SOS 调试扩展 (SOS.dll)
    使用Windbg和SoS扩展调试分析.NET程序
    windbg命令分类与概述
  • 原文地址:https://www.cnblogs.com/wgwyanfs/p/7372826.html
Copyright © 2011-2022 走看看