多生产者多消费者 , 生产一个数据,消费一个数据

public class ProduceConsumer{
    
    public int i = 0;
    
    final  private Object lock = new Object();
    
    public volatile boolean isProduce = false;
    
    public void produce() {
        synchronized (lock) {
            while(isProduce) {
                try {
                    lock.wait();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
            i ++;
            System.out.println(Thread.currentThread().getName() + "生产数据"+ i);
            isProduce = true;
            lock.notifyAll();
        }
    }
    
    public void consumer() {
        synchronized (lock) {
            while(!isProduce) {
                try {
                    lock.wait();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
            System.out.println(Thread.currentThread().getName() + "消费数据"+ i);
            isProduce = false;
            lock.notifyAll();
        }
    }
    
    
    public static void main(String[] args) {
        
        ProduceConsumer  pc = new ProduceConsumer();
        
        Stream.of("【生产者一】","【生产者二】").forEach((n)-> {
            new Thread(n) {

                @Override
                public void run() {
                    while(true) {
                        pc.produce();    
                    }
                }
                
            }.start();
        } );
        
        Stream.of("【消费者一】","【消费者二】","【消费者三】").forEach((n)-> {
            new Thread(n) {

                @Override
                public void run() {
                    while(true) {
                        pc.consumer();    
                    }
                }
                
            }.start();
        } );
    }

}

 

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。
扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄