不知道哪里错了??
package com.imooc.weather;
public class Weather
{
// 封装温度和湿度的属性
private int temperature;
private int humidity;
// 用于判断是生成还是读取天气信息
private boolean flag = false;
// 无参构造
public Weather()
{
}
// 带参构造方法
public Weather(int temperature, int humidity)
{
// super();
this.temperature = temperature;
this.humidity = humidity;
}
// getter和setter方法
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()
{
try
{
// 如果flag为真,则生成数据方法阻塞
if (flag)
{
wait();
}
else
{
// 执行生成数据的操作
this.setTemperature((int) (Math.random() * 40));
this.setHumidity((int) (Math.random() * 100));
System.out.println("生成天气数据[温度:" + this.getTemperature() + ",湿度:" + this.getHumidity() + "]");
// 已经生成数据将flag设置为true
flag = true;
// 唤醒其他的线程
notifyAll();
}
}
catch (InterruptedException ex)
{
ex.printStackTrace();
}
}
// 读取数据的方法
public synchronized void read()
{
try
{
// 如果flag为真,则读取数据方法阻塞
if (!flag)
{
wait();
}
else
{
System.out.println("读取天气数据[温度:" + this.getTemperature() + ",湿度:" + this.getHumidity() + "]");
// 已经生成数据将flag设置为true
flag = false;
// 唤醒其他的线程
notifyAll();
}
}
catch (InterruptedException ex)
{
ex.printStackTrace();
}
}
//重写toString方法
@Override
public String toString()
{
return "天气信息[温度:" + temperature + ", 湿度:" + humidity + "]";
}
}
package com.imooc.weather;
public class GenerateWeather extends Thread
{
//模拟一个天气
Weather weather;
public GenerateWeather(Weather weather)
{
this.weather=weather;
}
//重写run方法
@Override
public void run()
{
for(int i=0;i<100;i++)
{
weather.generate();
try
{
Thread.sleep(5000);
}
catch (InterruptedException e)
{
e.printStackTrace();
}
}
}
}
package com.imooc.weather;
public class ReadWeather extends Thread
{
//模拟一个天气
Weather weather;
public ReadWeather(Weather weather)
{
this.weather=weather;
}
//重写run方法
@Override
public void run()
{
for(int i=0;i<100;i++)
{
weather.read();
try
{
Thread.sleep(100);
}
catch (InterruptedException e)
{
e.printStackTrace();
}
}
}
}
package com.imooc.weathertest;
import com.imooc.weather.GenerateWeather;
import com.imooc.weather.ReadWeather;
import com.imooc.weather.Weather;
public class WeatherTest {
public static void main(String[] args)
{
new Thread(new GenerateWeather(new Weather())).start();
new Thread(new ReadWeather(new Weather())).start();
}
}
正在回答 回答被采纳积分+1
- 参与学习 人
- 提交作业 5461 份
- 解答问题 7238 个
此次推出的专题为Android攻城狮培养计划的第一部分语法与界面基础篇,将带大家从0开始学习Android开发。
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星