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();
    			}			
    		}
    	}
    }
    
  • 相关阅读:
    传的参数乱码
    Tp5.0中分页加搜索的用法!!!
    TP5.0循环更新数据问题
    TP5.0中foreach里面使用save方法变成更新问题
    TP5.0中软删除的用法
    TP5.0中save方法加主键id的用法!!!
    用宝塔的定时任务写shell命令会以root执行的解决方法
    兆易创新RISC-V开发板评测
    使用vsCode配合IAR搭建arm开发环境
    Vue 路由导航解析流程
  • 原文地址:https://www.cnblogs.com/leihuazhe/p/7756654.html
Copyright © 2011-2022 走看看