zoukankan      html  css  js  c++  java
  • 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();
    			}			
    		}
    	}
    }
    
  • 相关阅读:
    Mac挂载分区
    连接SFTP命令
    【转】10.13.6蓝牙失效的解决方法(Broadcom-BCM94352z-DW1560)
    Jetbrains2020系列配置路径变动(Pycharm2020双击无法打开)
    libtorch 常用api函数示例(史上最全、最详细)
    有用链接
    cuda 编程1
    CMakeLists.txt
    模型压缩--剪枝,tensorrt实验调研
    iou map TP TN FP FN Precision Recall
  • 原文地址:https://www.cnblogs.com/leihuazhe/p/7756654.html
Copyright © 2011-2022 走看看