初学线程,想问为啥第二个read线程运行不了?

//weather类
package com.Imooc.thread.test3;
public class Weather {
	private int temperature;
	private int humidity;
	boolean flag=false;

	public Weather() {
		// TODO Auto-generated constructor stub
	}
	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(int temperature,int humidity) {
		if(flag) {
			try {
				wait();
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}else {		
		this.setTemperature(temperature);
		this.setHumidity(humidity);
		flag=true;
		notifyAll();
		}
	}	
	public synchronized void read() {

		if(!flag) {
			try {
				wait();
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}else {			
		this.getTemperature();
		this.getHumidity();
		flag=false;
		notifyAll();
		}		
	}	
}
//GenerateWeather类
package com.Imooc.thread.test3;
public class GenerateWeather implements Runnable {
	Weather weather;
	public GenerateWeather() {
		this.weather=new Weather();
		
	}
	@Override
	public void run() {
		// TODO Auto-generated method stub
		for(int i=0;i<100;i++) {
		weather.generate(18, 22);
		System.out.println("生成天气!");
		}
	}

}
//ReadWeather类
package com.Imooc.thread.test3;
public class ReadWeather implements Runnable {
	Weather weather;
	
	public ReadWeather() {
		this.weather=new Weather();
	}
	@Override
	public void run() {
		// TODO Auto-generated method stub
		for(int i=0;i<100;i++) {
				weather.read();
		System.out.println("读取天气!");
		}
	}
}
//测试类
package com.Imooc.thread.test3;

public class Test {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		ReadWeather re=new ReadWeather();
		GenerateWeather ge=new GenerateWeather();
		
		Thread thread2=new Thread(re);	
		Thread thread1=new Thread(ge);
		thread1.start();
		thread2.start();
		
	}

}


慕婉清7489420
浏览 829回答 1
1回答
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java