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();
}
}
}