Java 多线程练习 模拟年轻人和老年人爬山

时间:2022-12-29 18:09:31

|--需求说明

Java 多线程练习 模拟年轻人和老年人爬山

 

|--实现思路

Java 多线程练习 模拟年轻人和老年人爬山

 

|--代码内容

Java 多线程练习 模拟年轻人和老年人爬山Java 多线程练习 模拟年轻人和老年人爬山
 1 package cn.thread2;
 2 
 3 /**
 4  * @auther::9527
 5  * @Description: 爬山
 6  * @program: shi_yong
 7  * @create: 2019-08-05 15:41
 8  */
 9 public class Hiking implements Runnable {
10     //设置两个属性,用于初始化数据
11     private int time;
12     private int num;
13 
14     public Hiking(int time, int num) {
15         this.time = time;
16         this.num = num;
17     }
18 
19     public Hiking() {
20     }
21 
22     public int getTime() {
23         return time;
24     }
25 
26     public void setTime(int time) {
27         this.time = time;
28     }
29 
30     public int getNum() {
31         return num;
32     }
33 
34     public void setNum(int num) {
35         this.num = num;
36     }
37 
38     @Override
39     public void run() {
40         //num -1 的原因是程序的循环终止条件是0,所以实际循环次数就是num+1
41         for (int i = num-1; i >= 0; i--) {
42             Thread t = Thread.currentThread();
43 
44             //设定终止条件----如果循环终止,就跳出这个方法
45             if (i == 0) {
46                 System.out.println(t.getName() + "已达到终点");
47                 return;
48             }
49             //按需求输出提示信息
50             System.out.println(t.getName() + "爬完了第" + (num - i) + "个100米");
51             try {
52                 //设置sleep  模拟爬山花费的单位时间   老年人花费长一点,年轻人花费短一点
53                 Thread.sleep(time);
54             } catch (InterruptedException e) {
55                 e.printStackTrace();
56             }
57 
58         }
59     }
60 
61 }
线程类--用于重写run方法和构造初始数据
Java 多线程练习 模拟年轻人和老年人爬山Java 多线程练习 模拟年轻人和老年人爬山
 1 package cn.thread2;
 2 
 3 /**
 4  * @auther::9527
 5  * @Description: 测试类
 6  * @program: shi_yong
 7  * @create: 2019-08-05 15:52
 8  */
 9 public class Test {
10     public static void main(String[] args) {
11         //用构造方法进行传参,年轻人50毫秒爬完一个100米,老年人100毫秒爬完一个100米
12         //总共爬5个100米
13         Hiking old = new Hiking(100,5);
14         Hiking young =new Hiking(50,5);
15         //设置一个老年人
16         Thread oldMan = new Thread(old,"老年人");
17         //设置一个年轻人
18         Thread youngMan = new Thread(young,"年轻人");
19         oldMan.start();
20         youngMan.start();
21     }
22 }
程序入口---创建线程

 

|--运行结果

Java 多线程练习 模拟年轻人和老年人爬山

 

|--过程中的问题点

运行的时候,发现如下图示的问题,没有显示**已到达终点

Java 多线程练习 模拟年轻人和老年人爬山

经排查发现是for循环和for循环下的if条件设置 没有关联到,导致if方法体未执行,如下图示,i的终止条件是1,而if的判断条件是 i==0;所以i==0的方法体根本不会被执行

Java 多线程练习 模拟年轻人和老年人爬山

 

将i>0,变更为 i>=0 后,程序正常运行