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]