java多线程模拟生产者消费者问题
//ProducerConsumer是主类,Producer生产者,Consumer消费者,Product产品 //Storage仓库
public class ProducerConsumer {
public static void main(String[] args) { Storage s = new Storage(); Producer p = new Producer(s); Consumer c = new Consumer(s); Thread tp = new Thread(p); Thread tc = new Thread(c); tp.start(); tc.start();
} }
class Consumer implements Runnable {//消费者 Storage s = null;
public Consumer(Storage s){ this.s = s; }
public void run() {
for(int i=0; i<20; i++){ }
}
}
Product p = s.pop();//取出产品 try {
Thread.sleep((int)(Math.random()*1500)); } catch (InterruptedException e) { e.printStackTrace(); }
class Producer implements Runnable {//生产者 Storage s = null;
public Producer(Storage s){ this.s = s; }
public void run() {
for(int i=0; i<20; i++){
Product p = new Product(i);
s.push(p); //放入产品
// System.out.println(\"生产者放入:\" + p); try {
Thread.sleep((int)(Math.random()*1500)); } catch (InterruptedException e) { e.printStackTrace(); } }
} }
class Product { int id;
public Product(int id){ this.id = id; }
public String toString(){//重写toString方法 return \"产品:\"+this.id; } }
class Storage { int index = 0;
Product[] products = new Product[5];
public synchronized void push(Product p){//放入 while(index==this.products.length){ try {
this.wait();
} catch (InterruptedException e) { e.printStackTrace(); } }
this.products[index] = p;
System.out.println(\"生产者放入\"+index+\"位置:\" + p); index++;
this.notifyAll(); }
public synchronized Product pop(){//取出 while(this.index==0){ try {
this.wait();
} catch (InterruptedException e) { e.printStackTrace(); } }
index--;
this.notifyAll();
System.out.println(\"消费者从\"+ this.products[index]);
return this.products[index]; } }
index+ 位置取出: + \"\"
因篇幅问题不能全部显示,请点此查看更多更全内容