public class TestProducerConsumer {
public static void main(String[] args) {
StoreRoom sr = new StoreRoom();
Producer p1 = new Producer(sr,"制造一部");
Producer p2 = new Producer(sr,"制造二部");
Consumer c1 = new Consumer(sr,"销售一部");
Consumer c2 = new Consumer(sr,"销售二部");
Thread t1 = new Thread(p1);
Thread t2 = new Thread(p2);
Thread t3 = new Thread(c1);
Thread t4 = new Thread(c2);
t1.start(); t2.start();t3.start(); t4.start();
}
}
class Product {
int id;
String producedBy;
String consumedBy;
Product(int id,String producedBy) {
this.id = id;
this.producedBy = producedBy;
}
public void consume(String consumedBy) {
this.consumedBy = consumedBy;
}
public String toString() {
return "该产品的,生产部门是:" + producedBy +",销售部门是:" + consumedBy;
}
public String getProducedBy() {
return producedBy;
}
public String getConsumedBy() {
return consumedBy;
}
public int getID() {
return this.id;
}
}
class StoreRoom {
Product[] pL = new Product[6];
int index = 0;
public synchronized void push(Product p) throws Exception {
while(index == pL.length) {
System.out.println(p.getProducedBy() + "仓库满了,请你歇歇稍等");
this.wait();
}
pL[index] = p;
index ++;
System.out.println(p.getProducedBy() + "已经生产了" + p.getID() +"个,销售部门快来取货卖");
notifyAll();
}
public synchronized Product pop(String s) throws Exception {
while(index == 0) {
System.out.println(s + " 仓库没货了,请你歇歇稍等");
this.wait();
}
index--;
Product product = pL[index];
product.consume(s);
System.out.println(s + "已经拿走了一个,制造部门赶快生产");
notifyAll();
return product;
}
}
class Producer implements Runnable{
StoreRoom sr;String s;
Producer(StoreRoom sr,String s) {
this.sr = sr;
this.s = s;
}
public void run() {
int i = 0;
while(true) {
i++;
Product p = new Product(i,s);
try{
sr.push(p);
}
catch(Exception e) {
}
}
}
}
class Consumer implements Runnable{
StoreRoom sr;String s;
Consumer(StoreRoom sr,String s) {
this.sr = sr;
this.s = s;
}
public void run() {
while(true) {
try{
sr.pop(s);
}
catch(Exception e) {
}
}
}
}