为什么读取的温度和湿度都是0呢?谢谢!
package com.imooc.weather;
public class Weather {
private int shidu;
private int wendu;
public Weather() {
}
public int getShidu() {
return shidu;
}
public void setShidu(int shidu) {
this.shidu = shidu;
}
public int getWendu() {
return wendu;
}
public void setWendu(int wendu) {
this.wendu = wendu;
}
//生成天气数据的方法
public synchronized void generate(int a2,int b2) {
int i=1;
this.setWendu(a2);
this.setShidu(b2);
while(i<=100) {
System.out.println("生成天气数据 [ 温度:"+this.getWendu()+"湿度:"+this.getShidu()+"]");
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
i++;
}
}
//读取天气数据的方法
public synchronized void read() {
int i=1;
while(i<=100) {
System.out.println("读取天气数据 [ 温度:"+this.getWendu()+"湿度:"+this.getShidu()+"]");
try {
Thread.sleep(100);
} catch (InterruptedException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
i++;
}
}
//觉得toString没啥用
public String toString() {
return "湿度:"+this.shidu+"温度:"+this.wendu;
}
}
package com.imooc.weather;
import java.util.Random;
public class GenerateWeather implements Runnable{
int x=40,y=100;//温度x 湿度y
Weather wea=new Weather();
Random ran=new Random();
public GenerateWeather() {
}
public void run(){
int a2=ran.nextInt(x);
int b2=ran.nextInt(y);
wea.generate(a2,b2);
}
}
package com.imooc.weather;
public class ReadWeather implements Runnable {
Weather wea2=new Weather();
public ReadWeather() {
}
public void run() {
wea2.read();
}
}
package com.imooc.weather;
public class WeatherTest {
public static void main(String[] args) {
// TODO 自动生成的方法存根
GenerateWeather a=new GenerateWeather();
ReadWeather b=new ReadWeather();
Thread generate=new Thread(a);
Thread read=new Thread(b);
generate.start();
read.start();
try {
generate.join();
read.join();
} catch (InterruptedException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
}
}
输出结果:
生成天气数据 [ 温度:29湿度:11]
读取天气数据 [ 温度:0湿度:0]
读取天气数据 [ 温度:0湿度:0]
读取天气数据 [ 温度:0湿度:0]
读取天气数据 [ 温度:0湿度:0]
读取天气数据 [ 温度:0湿度:0]
问题:
①、很多读取是因为没有写wait()吧?
②、为什么读取的温度和湿度都是0呢?
31
收起
正在回答
1回答
同学,你好,1)循环要写在GenerateWeather里,而不是Weather噢。并且生成的随机数也要放在循环中。对应的ReadWeather也是相同道理。2)你说的没错,应该生成一个数据再读一个,在没有生成数据前,不能读第二次。你这里是生成一次,读取多次。所以这里要加flag判断一下,此时能读还是能生成数据。根据flag来判断自己要不要wait(),操作完自己的任务之后再唤醒其它线程。祝学习愉快!
Android零基础入门2018版
- 参与学习 人
- 提交作业 5461 份
- 解答问题 7238 个
此次推出的专题为Android攻城狮培养计划的第一部分语法与界面基础篇,将带大家从0开始学习Android开发。
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星