onlyor 发表于 2013-2-3 13:58:11

java 多线程 生产者和消费者的实现

public class ProducerConsumer {    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);      cThread.setPriority(Thread.MIN_PRIORITY);      pThread.setName("Producer");      cThread.setName("Consumer");                pThread.start();      cThread.start();    }}class Product {    int id;    public Product(int id) {      super();      this.id = id;    }    public String toString() {      return "Product:" + id;    }}class ProductBox {    Product[] productbox = new Product;    int       index      = 0;    public ProductBox() {      super();    }    public synchronized void push(Product p) {      while (index == productbox.length) {            try {                System.out.println(Thread.currentThread().getName() + ".push()");                this.wait();            } catch (InterruptedException e) {                e.printStackTrace();            }      }      this.notify();      productbox = p;      index++;    }    public synchronized Product pop() {      while (index == 0) {            try {                System.out.println(Thread.currentThread().getName() + ".pop()");                this.wait();            } catch (InterruptedException e) {                e.printStackTrace();            }      }      this.notify();      index--;      return productbox;    }}class Producer implements Runnable {    ProductBox productbox = null;    public Producer(ProductBox productbox) {      super();      this.productbox = productbox;    }    public void run() {      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;    }    public void run() {      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();            }      }    }}
页: [1]
查看完整版本: java 多线程 生产者和消费者的实现