交作业交作业
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 + "]";
}
}3
收起
正在回答
1回答
同学你好,代码完成的很棒!继续努力!
如果我的回答解决了你的疑惑,请采纳!祝学习愉快!
1. Java 零基础入门
- 参与学习 人
- 提交作业 3802 份
- 解答问题 11489 个
本阶段带你迈入Java世界,学习Java必备基础知识,基础语法、面向对象思想以及常用工具类的使用。
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星