消费者模式

消费者生产者模式

public class Basket {
    
    
    private volatile Object data;

    public synchronized void product(Object data) {
    
    
        while (this.data != null)
            try {
    
    
                this.wait();
            } catch (InterruptedException e) {
    
    
                e.printStackTrace();
            }

        this.data = data;
        System.out.println(Thread.currentThread().getName() + "生产一个日期" + this.data);
        this.notifyAll();//唤醒当前对象处于wait的所有线程
    }

    //消费者数据
    public synchronized void consume() {
    
    
        while (this.data == null) {
    
    
            try {
    
    
                this.wait();
            } catch (InterruptedException e) {
    
    
                e.printStackTrace();
            }

        } System.out.println(Thread.currentThread().getName() + "消费一个日期" +this.data);
this.data=null;
this.notifyAll();
    }
public class Consume extends  Thread {
    
    
    private Basket basket;

    public Consume(Basket basket) {
    
    
        this.basket = basket;
    }

    @Override
    public void run() {
    
    
        //消费20次日期的对象
        for (int i = 0; i < 20; i++) {
    
    
            basket.consume();
        }
    }
}
public class Producer extends Thread {
    
    
    private Basket basket;
    //通过构造器传入对应的basket对象
    public Producer(Basket basket){
    
    
        this.basket=basket;
    }

    @Override
    public void run() {
    
    
        //生产20次的日期
        for (int i=0;i<20;i++){
    
    
            Object data=new Date();//生产者生产的具体产品
            basket.product(data);
        }
    }
}
public class Test1 {
    
    
    public static void main(String[] args) {
    
    
        Basket basket=new Basket();
        Thread t1=new Consume(basket);
       t1.start();
       Thread t2=new Producer(basket);
       t2.start();
    }
}

猜你喜欢

转载自blog.csdn.net/w2903265477/article/details/113894897