java经典例题:生产者/消费者问题

java经典例题:生产者/消费者问题

●生产者(Productor)将产品放在柜台(Counter),而消费者(Customer)从柜台

处取走产品,生产者一次只能生产固定数量的产品(比如:1), 这时柜台中不能

再放产品,此时生产者应停止生产等待消费者拿走产品,此时生产者唤醒消费者来

取走产品,消费者拿走产品后,唤醒生产者,消费者开始等待.

Counter:

	public class Counter {
    int num=0;//代表商品数
    //锁对象是this,add()和sub()用同一把锁

    //生产商品
    public synchronized void add(){
        if(num==0){
            System.out.println("生产者生产了一件商品  ");
            num=1;//生产者生产了一件商品
            this.notify();//唤醒消费者
        }else {
            try {
                this.wait();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }

    //卖出商品
    public synchronized void sub(){
        if(num>0){
            System.out.println("消费者购买了一件商品  ");
            num=0;//消费者拿走了商品
            this.notify();//唤醒生产者
        }else {
            try {
                this.wait();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}

ProductorThread:

public class ProductorThread extends Thread{
    Counter counter;
    ProductorThread(Counter counter){
        this.counter=counter;//把测试中的counter放入线程中使用
    }
    @Override
    public void run() {
        while (true) {
            counter.add();
        }
    }
}

CustomerThread:

public class CustomerThread extends Thread{
    Counter counter;
    CustomerThread(Counter counter){
        this.counter=counter;//把测试中的counter放入线程中使用
    }
    @Override
    public void run() {
        while (true) {
            counter.sub();
        }
    }
}

Test:

		Counter counter=new Counter();
        ProductorThread productorThread=new ProductorThread(counter);
        CustomerThread customerThread=new CustomerThread(counter);
        productorThread.start();
        customerThread.start();
/*
生产者生产了一件商品  
消费者购买了一件商品    
生产者生产了一件商品  
消费者购买了一件商品  
生产者生产了一件商品  
消费者购买了一件商品  
生产者生产了一件商品  
消费者购买了一件商品
......
*/

你可能感兴趣的:(java,开发语言)