生产者与消费者堆栈问题
public class ProducerConsumer {
	public static void main(String [] args) {
		SyncStack ss = new SyncStack();
		Producer p = new Producer(ss);
		Consumer c = new Consumer(ss);
		Thread p1 = new Thread(p);
		Thread c1 = new Thread(c);
		p1.start();c1.start();
		while(c1.isAlive() == false) {
			System.out.println("操作结束,一共进行了" +SyncStack.num + "次操作!");
		}
	}
}
class Product {
	private int id ;
	Product(int id ) {
		this.id = id;
	}	
	public String toString() {
		return "Product:" + id;
	}
}
class SyncStack {
	private Product [] arr = new Product[10];
	private int index = 0;
	static int num = 0;	
	public synchronized void push(Product pd) {
		while(index == arr.length) {
			try {
				this.wait();
			}catch(InterruptedException x) {
				x.printStackTrace();
			}
		}
		this.notify();
		num++;
		arr[index] = pd;
		index++;
	}	
	public synchronized Product pop() {
		while(index == 0) {
			try {
				this.wait();
			}catch(InterruptedException x) {
				x.printStackTrace();
			}
		}
		this.notify();
		num++;
		index--;
		return arr[index];
	}	
}
class Producer implements Runnable {
	private SyncStack ss;
	Producer(SyncStack ss) {
		this.ss = ss;
	}	
	public void run() {
		for(int i = 1;i<21;i++) {
			Product pd = new Product(i);
			ss.push(pd);
System.out.println("生产了" + pd + "!");			
		}
		try {
			Thread.sleep((int)(Math.random()*1000));
		}catch(InterruptedException e) {
			e.printStackTrace();
		}
	}
}
class Consumer implements Runnable {
	private SyncStack ss;
	Consumer(SyncStack ss) {
		this.ss = ss;
	}	
	public void run() {
		for(int i = 0;i<20;i++) {
			Product pd = ss.pop();
System.out.println("消费了" + pd +"!");		
			try {
				Thread.sleep((int)(Math.random()*1000));
			}catch(InterruptedException e) {
				e.printStackTrace();
			}
		}
	}
}
这是一个关于生产者和消费者的小程序,但是运行结果与预期的不太一样。第一:生产和消费的顺序不是按照堆栈的形式打印出来;第二main方法最后的语句while(c1.isAlive() == false) {
			System.out.println("操作结束,一共进行了" +SyncStack.num + "次操作!");
		}
为什么执行不出来?
打印结果:
D:\java\ProducerConsumer>javac Pro**.java
D:\java\ProducerConsumer>java ProducerConsumer
生产了Product:1!
生产了Product:2!
生产了Product:3!
生产了Product:4!
生产了Product:5!
生产了Product:6!
生产了Product:7!
生产了Product:8!
消费了Product:3!
生产了Product:9!
生产了Product:10!
生产了Product:11!
生产了Product:12!
消费了Product:11!
生产了Product:13!
消费了Product:12!
生产了Product:14!
消费了Product:13!
生产了Product:15!
消费了Product:14!
生产了Product:16!
消费了Product:15!
生产了Product:17!
消费了Product:16!
生产了Product:18!
消费了Product:17!
生产了Product:19!
消费了Product:18!
生产了Product:20!
消费了Product:19!
消费了Product:20!
消费了Product:10!
消费了Product:9!
消费了Product:8!
消费了Product:7!
消费了Product:6!
消费了Product:5!
消费了Product:4!
消费了Product:2!
消费了Product:1!
------解决方案-------------------- while条件满足它会一直执行下去
while条件不满足它会直接跳出
你原来执行while(c1.isAlive() == false)的时候,c1是活着的,所以c1.isAlive()为true,所以while条件不满足,直接跳出,
下班,回家
------解决方案-------------------- 
探讨  private static int id = 0; public String toString() { return "产品" + id; }