温度、湿度随机赋值

温度、湿度随机赋值

package com.mawnqiang.weather;

public class Weather {
    private int temperature;
    private int humidity;

    public int getTemperature() {
        return temperature;
    }

    public void setTemperature(int temperature) {
        this.temperature = temperature;
    }

    public int getHumidity() {
        return humidity;
    }

    public void setHumidity(int humidity) {
        this.humidity = humidity;
    }

    boolean flag = false; // 判断生成还是读取

    // 生成天气数据的方法
    public synchronized void generate() {    
        if (flag) { // 如果已经生成天气数据则等待
            try {
                wait();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        this.setTemperature((int)(Math.random()*40));
        this.setHumidity((int)(Math.random()*60));
        System.out.println("生成天气数据:[温度:" +this.getTemperature()+ ",湿度:" +this.getHumidity()+ "]");
        flag = true;// 表示完成生成数据
        notifyAll(); // 唤醒所有进程, 避免锁死(相互等待)
    }

    // 读取天气数据的方法
    public synchronized void read() {        
        if (!flag) {// 没有数据则等待
            try {
                wait();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        System.out.println("读取天气数据:[温度:" + this.getTemperature() + ",湿度:" + this.getHumidity() + "]");

        flag = false; // 已读取完数据,变回无数据状态
        notifyAll();
    }
}

package com.mawnqiang.weather;

public class GenerateWeather implements Runnable {
    Weather weather;
    public GenerateWeather(Weather weather) {
        this.weather = weather;
    }

    @Override
    public void run() {
//        weather.setTemperature((int)(Math.random()*40));
//        weather.setHumidity((int)(Math.random()*60));
        for(int i = 0; i < 100; i++) {        
        weather.generate();
        try {
            Thread.sleep(5000); // 睡眠5秒
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        }        
    }
}

老师你好,当我将下面赋值语句写进生成天气数据线程run方法,获取到的温度 湿度一直不变。。这是

//        weather.setTemperature((int)(Math.random()*40));
//        weather.setHumidity((int)(Math.random()*60));


正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
大佬金 2018-01-26 09:40:45
//        weather.setTemperature((int)(Math.random()*40));
//        weather.setHumidity((int)(Math.random()*60));

这两行语句在run方法中运行一遍就不再运行了,所以仅仅set一次温度和湿度的值,如果想生成一次就改一次的话应该把它写在run方法的for循环体中。

问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师