java生产者消费者模型

本文介绍了一个使用Java实现的生产者消费者模式案例,通过线程间的同步机制保证了数据的一致性和完整性。生产者负责生成数据,消费者负责消费数据,二者通过共享内存进行交互。




public class Main {
    public static void main(String args[]) {
        Info info = new Info();
        new Thread(new Produtor(info)).start();
        new Thread(new Customer(info)).start();

    }
}

class Info{
    private boolean flag = true;
    //true:表示可以生产,但是不可以取走
    //false:表示可以取走,但是不可以生产
    private String title;
    private String content;
    //线程同步解决数据乱问题-即解决title和content不一致问题
    //wait()需要等待notify()的唤醒
    public synchronized void set(String title,String content){
        if(this.flag == false){
            try {
                super.wait();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        this.title = title;
        try{
            Thread.sleep(200);
        }catch (InterruptedException e){
            e.printStackTrace();
        }
        this.content = content;
        this.flag = false;
        super.notify();//唤醒其他等待线程
    }
    public synchronized void get(){
        if(this.flag == true){
            try {
                super.wait();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        try{
            Thread.sleep(100);
        }catch (InterruptedException e){
            e.printStackTrace();
        }
        System.out.println(this.title+"-"+this.content);
        this.flag = true;
        super.notify();
    }
}

class Produtor implements Runnable{
    private Info info;
    public Produtor(Info info){
        this.info = info;
    }
    @Override
    public void run() {
        for(int x = 0;x<100;x++){
            if(x%2==0){
                this.info.set("小明","好学生");
            }else{
                this.info.set("小李","坏学生");
            }
        }
    }
}

class Customer implements Runnable{
    private Info info;
    Customer(Info info){
        this.info = info;
    }
    @Override
    public void run() {
        for(int x=0;x<100;x++){
            this.info.get();
        }
    }
}





评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值