为了账号安全,请及时绑定邮箱和手机立即绑定

多线程生产者消费者问题,出现了空值,问题出在哪里?

多线程生产者消费者问题,出现了空值,问题出在哪里?

幕布斯7119047 2019-03-13 14:15:45
多线程生产者消费者问题, producer生产电影(两种), customer 观看电影Film.javapackage Film;public class Film {    private String name;    private String actor;    private boolean flag = false;            public synchronized void set(String name, String actor)            throws InterruptedException {                if(!flag){            this.wait();        }        this.setName(name);        Thread.sleep(1000);        this.setActor(actor);        flag = false;        this.notify();    }        public synchronized void get() throws InterruptedException{                if(flag){            this.wait();        }        Thread.sleep(1000);        System.out.println("3"+this.getName()+"-->"+this.getActor());        flag=true;        this.notify();    }    public void setName(String name) {        this.name = name;    }    public void setActor(String actor) {        this.actor = actor;    }    public String getName() {        return name;    }    public String getActor() {        return actor;    }}Producer.javapackage Film;public class Producer implements Runnable {    private Film film ;    public Producer(Film film) {        super();        this.film = film;    }    @Override    public void run() {        // TODO Auto-generated method stub        for (int i = 1; i < 10; i++) {            if (0==i%2) {                try {                    System.out.println("1-produce film " + i);                    film.set("film1", "actor1");                } catch (InterruptedException e) {                    e.printStackTrace();                }            } else {                try {                    System.out.println("1-produce film " + i);                    film.set("film2", "actor2");                } catch (InterruptedException e) {                    // TODO Auto-generated catch block                    e.printStackTrace();                }            }        }    }}请问第二行为什么会出现空值?
查看完整描述

2 回答

?
心有法竹

TA贡献1866条经验 获得超5个赞

在 Film 这个代码里面,flag初始化为false,
看你的 Film class 中的set, get 方法,必须先执行过 get 之后 才能执行 set。

所以我觉得 File class 中 的get,set方法开头的flag判断应该是写反了吧!


查看完整回答
反对 回复 2019-04-19
  • 2 回答
  • 0 关注
  • 554 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信