温度、湿度随机赋值
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));
13
收起
正在回答 回答被采纳积分+1
1回答
Java零基础入门18
- 参与学习 人
- 提交作业 7317 份
- 解答问题 14452 个
想要入门学编程?多年一直活跃在编程语言排行版前列的Java是一个很好的选择。本路径将从Java基础语法、面向对象、常用工具类三部分,为你开启软件开发的大门!
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星