• Java并发案例03---生产者消费者问题02


    生产者消费者第二种情形

    
    package com.maple.msb.one;
    
    
    public class ProducerConsumer {
    	public static void main(String[] args) {
    		SyncStack ss = new SyncStack();
    		Producer p = new Producer(ss);
    		Consumer c = new Consumer(ss);
    		new Thread(p).start();
    		new Thread(p).start();
    		new Thread(p).start();
    		new Thread(c).start();
    	}
    }
    
    class WoTou {
    	int id; 
    	WoTou(int id) {
    		this.id = id;
    	}
    	public String toString() {
    		return "WoTou : " + id;
    	}
    }
    
    class SyncStack {
    	int index = 0;
    	WoTou[] arrWT = new WoTou[6];
    
    	public synchronized void push(WoTou wt) {
    		while(index == arrWT.length) {
    			try {
    				this.wait();
    			} catch (InterruptedException e) {
    				e.printStackTrace();
    			}
    		}
    		this.notifyAll();		
    		arrWT[index] = wt;
    		index ++;
    	}
    
    	public synchronized WoTou pop() {
    		while(index == 0) {
    			try {
    				this.wait();
    			} catch (InterruptedException e) {
    				e.printStackTrace();
    			}
    		}
    		this.notifyAll();
    		index--;
    		return arrWT[index];
    	}
    }
    
    class Producer implements Runnable {
    	SyncStack ss = null;
    	Producer(SyncStack ss) {
    		this.ss = ss;
    	}
    
    	public void run() {
    		for(int i=0; i<20; i++) {
    			WoTou wt = new WoTou(i);
    			ss.push(wt);
    			System.out.println("生产了:" + wt);
    			try {
    				Thread.sleep((int)(Math.random() * 200));
    			} catch (InterruptedException e) {
    				e.printStackTrace();
    			}			
    		}
    	}
    }
    
    class Consumer implements Runnable {
    	SyncStack ss = null;
    	Consumer(SyncStack ss) {
    		this.ss = ss;
    	}
    
    	public void run() {
    		for(int i=0; i<20; i++) {
    			WoTou wt = ss.pop();
    			System.out.println("消费了: " + wt);
    			try {
    				Thread.sleep((int)(Math.random() * 1000));
    			} catch (InterruptedException e) {
    				e.printStackTrace();
    			}			
    		}
    	}
    }
    
  • 相关阅读:
    javascript运算符
    javascript字符串转数字
    javascript的变量声明和数据类型
    javascript的历史和入门
    CSS中定位
    CSS中盒子模型
    CSS操作表格的边框和表格的属性示例代码
    常用的CSS样式示例代码
    CSS伪类选择器
    CSS选择器
  • 原文地址:https://www.cnblogs.com/leihuazhe/p/7756654.html
Copyright © 2020-2023  润新知