生产者和消费者

本文介绍了一个简单的生产者消费者模式实现,通过Java线程间的通信来确保数据的安全存取。生产者负责生成数据并将其添加到数据源中,而消费者则从数据源中取出并消费这些数据。使用synchronized关键字和wait/notify机制来协调生产者与消费者的同步问题。
摘要由CSDN通过智能技术生成
public class 生产者和消费者 {
    //涉及 线程安全  线程通信
    public static void main(String[] args){
        //生产者线程nue出来
        Provider provider = new Provider();
        //消费者线程nue出来
        Consume consume = new Consume();
        //新建数据源 nue出来访问
        DataSource dataSource = new DataSource();
        provider.dataSource = dataSource;
        consume.dataSource = dataSource;
        //运行程序
        provider.start();
        consume.start();


    }
    /*
     *生产者
     */
    static class Provider extends Thread{

        public DataSource dataSource;

        @Override
        public void run() {
            super.run();
            for (int i = 0; i < 100; i++) {
                //生产数据
                dataSource.add("包子:"+i);
            }
        }
    }

    /*
    *消费者
     */
    static class Consume extends Thread{

        public DataSource dataSource;

        @Override
        public void run() {
            super.run();
            for (int i = 0; i < 100; i++) {
                //消费数据
                String data = dataSource.getData();
            }
        }
    }
    /*
    *数据源
     */
    static class DataSource{
        private List<String> stringList = new ArrayList<>();

        public synchronized void add(String data){
            while (!isNull()){
                try {
                    wait();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
                System.out.println("生产数据:"+ data);
                stringList.add(data);//生产往里存放数据
                notifyAll();
        }

        public boolean isNull(){
            return stringList.size()==0;
        }

        public synchronized String getData(){
            String data = null;
            while (isNull()){
                try {
                    wait();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
            data = stringList.get(0);
            stringList.remove(0);
            System.out.println("拿到了消费数据没有:"+data);
            notifyAll();
            return data;
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值