为什么读取的温度和湿度都是0呢?谢谢!

为什么读取的温度和湿度都是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呢?

正在回答

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

1回答

同学,你好,1)循环要写在GenerateWeather里,而不是Weather噢。并且生成的随机数也要放在循环中。对应的ReadWeather也是相同道理。2)你说的没错,应该生成一个数据再读一个,在没有生成数据前,不能读第二次。你这里是生成一次,读取多次。所以这里要加flag判断一下,此时能读还是能生成数据。根据flag来判断自己要不要wait(),操作完自己的任务之后再唤醒其它线程。祝学习愉快!


  • Ceoking 提问者 #1
    因为写循环的位置不对所以读取时都是0呗?
    2020-12-05 18:33:57
  • 好帮手慕雪 回复 提问者 Ceoking #2

    1)和2)都得改。另外你得让GenerateWeather和ReadWeather操作的是同一个Weather,这样,在GenerateWeather设置上数据后,ReadWeather才能读到这个数据,你现在是两个不同的Weather,所以现在它们的数据没有任何联系。因为是两个对象嘛。

    2020-12-05 19:00:43
  • Ceoking 提问者 回复 好帮手慕雪 #3
    好的,回去我试试
    2020-12-05 19:06:07
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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