/**
* 产品对象
*/
class Product {
int id;
public Product(int id) {
super();
this.id = id;
}
public String toString(){
return "Product:" + id;
}
}
/**
* 产品盒对象
*/
class ProductBox {
Product[] productbox = new Product[6];
int index = 0;
public ProductBox() {
super();
}
public synchronized void push(Product p) {
while (index == productbox.length) {
try {
this.wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
this.notify();
productbox[index] = p;
index ++;
}
public synchronized Product pop() {
while (index == 0) {
try {
this.wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
this.notify();
index --;
return productbox[index];
}
}
/**
* 生产者
*/
class Producer implements Runnable {
ProductBox productbox = null;
public Producer(ProductBox productbox) {
super();
this.productbox = productbox;
}
@Override
public void run() {
// TODO Auto-generated method stub
for (int i=0; i<10; i++) {
Product p = new Product(i);
productbox.push(p);
System.out.println("produce:" + p);
try {
Thread.sleep((int)(Math.random() * 200));
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
/**
* 消费者
*/
class Consumer implements Runnable {
ProductBox productbox = null;
public Consumer(ProductBox productbox) {
super();
this.productbox = productbox;
}
@Override
public void run() {
// TODO Auto-generated method stub
for (int i=0; i<10; i++) {
Product p = productbox.pop();
System.out.println("consume:" + p);
try {
Thread.sleep((int)(Math.random() * 1000));
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
/**
* 生产者消费者问题
*/
public class ProducerConsumer {
/**
* @param args
*/
public static void main(String[] args) {
ProductBox pb = new ProductBox();
Producer p = new Producer(pb);
Consumer c = new Consumer(pb);
Thread pThread = new Thread(p);
Thread cThread = new Thread(c);
pThread.setPriority(Thread.MAX_PRIORITY);
pThread.start();
cThread.start();
}
}