5-3作业
来源:5-1 线程间通信
TomRidder716
2017-11-25 21:39:57
package com.imooc.Weather;
import java.util.Random;
public class Weather {
private int tem;
private int hum;
private boolean flag=false;
Random random=new Random();
int tem1=random.nextInt(41);
int hum1=random.nextInt(101);
public int getTem() {
return tem;
}
public void setTem(int tem) {
this.tem = tem;
}
public int getHum() {
return hum;
}
public void setHum(int hum) {
this.hum = hum;
}
public void generate()
{
System.out.println("生成天气数据[温度:" +tem1+"湿度"+
hum1+"]");
}
public void read()
{
System.out.println("生成天气数据[温度:" +tem1+"湿度"+
hum1+"]");
}
}
package com.imooc.Weather;
import com.imooc.queue.Queue;
public class GenerateWeather implements Runnable {
Weather weather;
public GenerateWeather(Weather weather)
{
this.weather=weather;
}
public void run()
{
int i=1;
while(i<=60)
{
weather.generate();
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
package com.imooc.Weather;
public class ReadWeather implements Runnable {
Weather weather;
public ReadWeather(Weather weather)
{
this.weather=weather;
}
public void run()
{
int i=1;
while(i<=60)
{
weather.read();
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
package com.imooc.Weather;
import com.imooc.queue.Queue;
public class WeatherTest {
public static void main(String[] args) {
Weather weather=new Weather();
new Thread(new GenerateWeather(weather)).start();
new Thread(new ReadWeather(weather)).start();
}
}
目前代码如下,但是实现不了需求,要怎么改呢,谢谢~
1回答
好帮手慕雪
2017-11-26
1)你应该在generate()中把tem1和hum1调用set方法设置给tem和 hum;。在read()中调用get方法获取tem和 hum; 2)为generate()和read()增加锁。3)设置一个flag,当flag为真的时候可以调用set方法设置给tem和 hum,输出内容后唤醒其它等待的资源,当flag为假的时候进行等待。4)当flag为假的时候可以调用get方法设置给tem和 hum,输出内容后唤醒其它等待的资源,当flag为真的时候进行等待。祝:学习愉快