ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

5-3

2021-12-27 22:06:18  阅读:173  来源: 互联网

标签: wea int void 天气 Weather public


学习了Java多线程的知识以后,我们编写一个应用程序来读取天气数据。即,模拟通过大气温度传感器来获取温度和湿度等天气数据。

很多家庭都有温湿度计,它实际上是通过大气温度传感器来获取温度和湿度信息,并显示在表盘中的。而我们要做的程序就是模拟这个过程,生成天气数据,然后显示出来。

需求分析:

1、设计一个天气类Weather,用于温度和湿度数据的存放和读取。

2、设计一个线程类GenerateWeather,用于生成天气数据。模拟生成100次天气数据,每次生成天气数据需要5秒的时间。

3、设计一个线程类ReadWeather,用于读取天气数据。模拟读取100次天气数据,每次读取数据需要0.1秒的时间。

4、设计一个测试类WeatherTest,模拟生成和读取数据的过程,要求实现生成一次,紧接着进行读取,不能出现不同步的情况。

 

 

 

详细设计:

1、 天气类Weather,包含int类型的温度(temperature)和湿度(humidity)属性,以及布尔类型的属性flag用于判断是生成还是读取天气信息。

方法包括:

(1)    温度和湿度属性的getter和setter方法

(2)    生成天气数据的方法public void generate()

            使用随机数获取0-40度之间的温度,0-100之间的湿度

(3)   读取天气数据的方法public void read()

(4)   重写toString()方法

2、 生成天气线程类GenerateWeather

属性为Weather类的对象,包括构造方法和run方法。

3、 读取天气线程类ReadWeather

属性为Weather类的对象,包括构造方法和run方法。

4、 测试类WeatherTest

在主方法中模拟生成和读取数据的过程

 1 public class GenerateWeather implements Runnable{
 2     Weather wea;
 3      
 4     public GenerateWeather(Weather wea) {
 5         this.wea = wea;
 6     }
 7  
 8     @Override
 9     public void run() {
10         for (int i=0;i<100;i++) {
11             wea.generate();
12             try {
13                 Thread.sleep(5000);
14             } catch (InterruptedException e) {
15                 // TODO Auto-generated catch block
16                 e.printStackTrace();
17             }
18         }
19          
20     }
21  
22 }

 

 1 public class Weather {
 2     private int temperatrue;
 3     private int humidity;
 4     private boolean flag = false;
 5 
 6     public int getTemperatrue() {
 7         return temperatrue;
 8 }
 9     public void setTemperatrue(int temperatrue) {
10         this.temperatrue = temperatrue;
11 }
12     public int getHumidity() {
13         return humidity;
14 }
15     public void set Humidity(int humidity) {
16         this.humidity = humidity;
17 }
18 
19     public synchronized void generate() {
20         if(flag) {
21             wait();
22     } catch (InterruptedExceptuin e) {
23         e.printStackTrace();
24     }
25 }
26     setTemperatrue((int)(Math.random()*40));
27     setHumidity((int)(Math.random()*100));
28     System.out.println("生成天气数据"+toString());
29     flag = true;
30     notifyAll();
31 }
32 
33     public synchronized void read (){
34         if(!flag){
35             try {
36                 wait();
37         }catch (InteruptedException e ){
38             e.printStackTrace();
39     }
40 }
41     System.out.println(""+toString());
42     flag = false;
43     notifyAll();
44 }
45 
46      @Override
47     public String toString() {
48         return "[温度:" + temperatrue + ", 湿度:" + humidity+ "]";
49     }
50      
51 }
 1 public class ReadWeather implements Runnable{
 2     Weather wea;
 3      
 4     public ReadWeather(Weather wea) {
 5         this.wea = wea;
 6     }
 7  
 8     @Override
 9     public void run() {
10         for (int i=0;i<100;i++) {
11             wea.read();
12             try {
13                 Thread.sleep(100);
14             } catch (InterruptedException e) {
15                 // TODO Auto-generated catch block
16                 e.printStackTrace();
17             }
18         }
19     }
20 }
 1 public class WeatherTest {
 2  
 3     public static void main(String[] args) {
 4         Weather wea = new Weather();
 5         new Thread(new GenerateWeather(wea)).start();
 6         new Thread(new ReadWeather(wea)).start();
 7  
 8     }
 9  
10 }

 

public class GenerateWeather implements Runnable{     Weather wea;           public GenerateWeather(Weather wea) {         this.wea = wea;     }       @Override     public void run() {         for (int i=0;i<100;i++) {             wea.generate();             try {                 Thread.sleep(5000);             catch (InterruptedException e) {                 // TODO Auto-generated catch block                 e.printStackTrace();             }         }               }   }

标签:,wea,int,void,天气,Weather,public
来源: https://www.cnblogs.com/chlnfss/p/15738023.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有