为什么不打印湿度温度呢

为什么不打印湿度温度呢

package com.wp.thread.weather;


public class Weather {

private int temperature; // 温度

private int humidity; // 湿度

boolean flag = false;


public Weather() {


}


public Weather(int temperature, int humidity) {

this.temperature = temperature;

this.humidity = humidity;

}


// 生成天气

public synchronized void generate() {

if (!flag) {

this.setTem((int) (Math.random() * 40));

this.setHum((int) (Math.random() * 100));

flag = true;

notifyAll();

try {

wait();

} catch (InterruptedException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

} else {

try {

wait();

} catch (InterruptedException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}


// 读取天气

public synchronized void read() {

if (flag) {

System.out.println(this);

flag = false;

notifyAll();

} else {

try {

wait();

} catch (InterruptedException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}


// toString

public String toString() {

return "[温度:" + this.getTem() + ",湿度:" + this.getHum() + "]";

}


public void setTem(int tem) {

this.temperature = tem;

}


public void setHum(int hum) {

this.humidity = hum;

}


public int getTem() {

return this.temperature;

}


public int getHum() {

return this.humidity;

}

}


package com.wp.thread.weather;


public class GenerateWeather implements Runnable {

Weather one;


public GenerateWeather(Weather one) {

this.one = one;

}


@Override

public void run() {

// TODO Auto-generated method stub

while(true) {

one.generate();

try {

Thread.sleep(5000);

} catch (InterruptedException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}


}


package com.wp.thread.weather;


public class ReadWeather implements Runnable{

Weather one;

public ReadWeather(Weather one) {

this.one = one;

}

@Override

public void run() {

// TODO Auto-generated method stub

while(true) {

one.read();

try {

Thread.sleep(100);

} catch (InterruptedException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

}


package com.wp.thread.weather;


public class Test {


public static void main(String[] args) {

try {

new Thread(new GenerateWeather(new Weather())).join();

new Thread(new ReadWeather(new Weather())).join();

} catch (InterruptedException e) {

e.printStackTrace();

}

new Thread(new GenerateWeather(new Weather())).start();

new Thread(new ReadWeather(new Weather())).start();


}

}


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

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

3回答
提问者 慕仔1940952 2018-10-10 00:03:31

找到原因了我把 测试类中的

new Thread(new GenerateWeather(new Weather())).start();

new Thread(new ReadWeather(new Weather())).start();

改成

Weather weather = new Weather();

new Thread(new GenerateWeather(weather)).start();

new Thread(new ReadWeather(weather)).start();

就ok了。虽然正常输出了,但是我还是不知道为什么会这样。不能这样创建对象吗?

  • 你好同学,这两种方式是有区别的,使用new关键字是new出来一个新的Weather对象,所以第一种方式你是分别new了两个Weather对象,而第二种方式是你的生成数据和读取数据操作的用的都是同一个Weather对象,所以是有区别的,祝学习愉快~
    2018-10-10 10:05:51
  • 提问者 慕仔1940952 回复 chrismorgen #2
    明白,谢谢。
    2018-10-10 13:26:02
慕布斯645313 2018-10-09 19:10:04

你把!flag前面的叹号去掉试试,你对照这个https://class.imooc.com/course/qadetail/70262哥们的代码改一改,他的代码写的挺好的

http://img1.sycdn.imooc.com//climg/5bbc8c260001476604460170.jpg

好帮手慕查理 2018-10-09 14:54:07

您好,因为在Weather类的generate和read方法中并没有输出生成和读取的天气数据。另需要在Weather类中创建温度和湿度属性的getter和setter方法。祝学习愉快!

  • 提问者 慕仔1940952 #1
    没有明白,我在Weather中写了get/set,在read中也写了输出湿度温度了.
    2018-10-09 17:06:00
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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