package com.java.concurrent; /** * 生产者消费者模式 * @author fliay * */ public class TestProductorAndConsumer { public static void main(String[] args) { Clerk c = new Clerk(); Productor pro = new Productor(c); Consumer con = new Consumer(c); new Thread(pro,"生产者A").start(); new Thread(con,"消费者B").start(); new Thread(pro,"生产者C").start(); new Thread(con,"消费者D").start(); } } class Clerk{ //初始化产品 private int product = 0; //进货 public synchronized void get(){ if(product>=10){ System.out.println("产品已满!"); try { this.wait(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } this.notifyAll(); System.out.println(Thread.currentThread().getName()+":"+ ++product); } //卖货 public synchronized void sale(){ if(product<=0){ System.out.println("补货中!"); try { this.wait(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } this.notifyAll(); System.out.println(Thread.currentThread().getName()+":"+ --product); } } class Productor implements Runnable{ private Clerk clerk; public Productor(Clerk clerk) { this.clerk = clerk; } public void run() { for(int i=0;i<20;i++){ clerk.get(); } } } class Consumer implements Runnable{ private Clerk clerk; public Consumer(Clerk clerk) { this.clerk = clerk; } public void run() { for(int i=0;i<20;i++){ clerk.sale(); } } }