交作业交作业

交作业交作业

package com.imooc.lianxisan;

public class WeatherTest {
	public static void main(String[] args) {
		Weather we = new Weather();
		new Thread(new GenerateWeather(we)).start();
		new Thread(new ReadWeather(we)).start();
	}

}

package com.imooc.lianxisan;

/**
 * 读取天气方法
 * 
 * @author mhr04
 *
 */
public class ReadWeather implements Runnable {
	Weather we;

	public ReadWeather(Weather we) {
		this.we = we;
	}

	@Override
	public void run() {
		for (int i = 0; i < 100; i++) {
			we.read();
			try {
				// 每读取一次暂停1s
				Thread.sleep(1000);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}
}

package com.imooc.lianxisan;

/**
 * 生成天气方法
 * 
 * @author mhr04
 *
 */
public class GenerateWeather implements Runnable {
	Weather we;

	public GenerateWeather(Weather we) {
		this.we = we;
	}

	@Override
	public void run() {
		for (int i = 0; i < 100; i++) {
			we.generate();
			try {
				// 每读取一次暂停1s
				Thread.sleep(1000);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}
}

package com.imooc.lianxisan;

public class Weather {
	private int temperature;
	private int humidity;
	private boolean flag = false;

	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;
	}

//生成天气数据
	public synchronized void generate() {
		// 如果已经生成天气,那么此线程进入等待
		if (flag) {
			try {
				wait();
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		setTemperature((int) (Math.random() * 40));
		setHumidity((int) (Math.random() * 100));
		System.out.println("生成天气数据" + this.toString());
		// 如果没有生成天气,则另flag为true去生成天气。
		flag = true;
		// 唤醒所有线程
		notifyAll();

	}

//读取天气数据
	public synchronized void read() {
		// 如果没有天气生成,那么此线程进入等待
		if (!flag) {
			try {
				wait();
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		getTemperature();
		getHumidity();
		System.out.println("读取天气数据" + this.toString());
		// 如果没有生成天气,则另flag为false去等待天气生成。
		flag = false;
		// 唤醒所有线程
		notifyAll();

	}

	@Override
	public String toString() {
		return " [温度:" + temperature + ", 湿度:" + humidity + "]";
	}

}


正在回答

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

1回答

同学你好,代码完成的很棒!继续努力!

如果我的回答解决了你的疑惑,请采纳!祝学习愉快!

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

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

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

0 星
请稍等 ...
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

在线咨询

领取优惠

免费试听

领取大纲

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