|--需求说明
|--实现思路
|--代码内容
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 }
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 }
|--运行结果
|--过程中的问题点
运行的时候,发现如下图示的问题,没有显示**已到达终点
经排查发现是for循环和for循环下的if条件设置 没有关联到,导致if方法体未执行,如下图示,i的终止条件是1,而if的判断条件是 i==0;所以i==0的方法体根本不会被执行
将i>0,变更为 i>=0 后,程序正常运行