主要通过wait()和notify()方法进行线程间的通讯

class Product extends Thread{
	
	String name;
	float price;
	boolean flag = false;
			
}

class Productor extends Thread{
	
	Product p;
	
	public Productor(Product p) {
		
		this.p = p;
		
	}
	int i = 0;
	@Override
	public void run() {
		// TODO Auto-generated method stub
		super.run();
			while(true){
				synchronized(p){
					//通知生产者生产
					//p.notify();
				if(!p.flag){
					if(i%2 == 0){
						p.name = "苹果";
						try {
							Thread.sleep(10);
						} catch (InterruptedException e) {
							// TODO Auto-generated catch block
							e.printStackTrace();
						}
						p.price = 4.5f;
						System.out.println("生产者生产了"+p.name+" 价格是"+p.price);
					}
					else{
							p.name ="香蕉";
							p.price = 2.5f;
							System.out.println("生产者生产了"+p.name+"  价格是"+p.price);
						}
					i++;
					p.flag = true;
					p.notify();
					
				  }else{
					  //生产了产品后等待消费者消费
						try {
							p.wait();
						} catch (InterruptedException e) {
							// TODO Auto-generated catch block
							e.printStackTrace();
				     	}
				}
			}
		}
	}
		
}

class Consumer extends Thread{

	Product p;
	public Consumer(Product p) {
		
		this.p = p;
		
	}
	@Override
	public void run() {
		// TODO Auto-generated method stub
		super.run();
			while(true){
				synchronized(p){
					//通知启动消费者消费
					//p.notify();
					if(p.flag){
							System.out.println("消费者消费了"+p.name+"价格是"+p.price);
							p.flag = false;
							p.notify();
						}else{
						//消费了产品后等待生产者生产
						try {
							p.wait();
						} catch (InterruptedException e) {
							// TODO Auto-generated catch block
							e.printStackTrace();
					}
					}
				}
		}
	}

  

//main方法
	public static void main(String[] args) {

		Product p = new Product();
		
		Productor productor = new Productor(p);
		Consumer consumer = new Consumer(p);
		productor.start();
		consumer.start();
		
	}

  

posted on 2017-05-24 16:48  人生第一步  阅读(169)  评论(0编辑  收藏  举报