package com.pln.gaoji;public class TestPC {public static void main(String[] args) {SynContainer container = new SynContainer();new Producer(container).start();new Customer(container).start();}}//生产者class Producer extends Thread{SynContainer container;public Producer(SynContainer container){this.container = container;}@Overridepublic void run() {for (int i = 0; i < 100; i++) {try {container.push(new Chicken(i));} catch (InterruptedException e) {e.printStackTrace();}System.out.println("生产了"+i+"只鸡");}}}//消费者class Customer extends Thread{SynContainer container;public Customer(SynContainer container){this.container = container;}@Overridepublic void run() {for (int i = 0; i < 100; i++) {try {System.out.println("消费了"+container.pop().id+"只鸡");} catch (InterruptedException e) {e.printStackTrace();}}}}//产品class Chicken{int id;public Chicken(int id) {this.id = id;}}//缓冲区class SynContainer{// 需要一个容器大小Chicken[] chickens = new Chicken[10];// 容器计算器int count = 0;// 生产者放入产品public synchronized void push(Chicken chicken) throws InterruptedException {//如果容器满了,需要等待消费者消费if(count == chickens.length){//通知消费者消费,等待生产this.wait();}//如果没有满我们就需要丢入产品chickens[count] = chicken;count++;//可以通过消费者消费了this.notifyAll();}// 消费者消费产品public synchronized Chicken pop() throws InterruptedException {//判断能否消费if(count == 0){//等待生产者生产,消费者等待this.wait();}//如果可以消费count--;Chicken chicken = chickens[count];//吃完了,通知生产者生产this.notifyAll();return chicken;}}
大概结果:
