实验目的
1.掌握Java多线程并行执行的过程;
2.了解多线程生命周期和运行机制。
3.能编写并行执行的多线程程序。
实验任务与要求
设计两个人类对象(例如:男和女),通过每天吃东西和运动,来计算他们生活一个月后的体重。
实验原理(技术)
实验原理
多线程可以充分利用CUP资源,进一步提升程序执行效率。通过实现,
Runnable接口能实现多线程。
Runnable接口创建并启动线程的步骤:
(1)创建一一个类实现Runnable接口;
(2)重写run()方法(线程要执行的内容) ;
(3)创建Thread类对象,将实现Runnable接口的类的对象做为参数,传递
到Thread类的构造方法中(Thread (Runnable runable))。
(4)通过Thread类对象调用start()方法开启线程。
实验记载
步骤(算法、程序)、数据记录与处理、结果分析等
//Human类
1. package com.experiment05; 2. 3. 4. 5. import java.math.BigDecimal; 6. 7. 8. 9. public abstract class Human implements Runnable { 10. 11. // 定义私有属性 姓名 体重 12. 13. private String name; 14. 15. private double weight; 16. 17. // 构造方法 18. 19. public Human(String name, double weight) { 20. 21. this.name = name; 22. 23. this.weight = weight; 24. 25. } 26. 27. // get set 方法 28. 29. 30. 31. public String getName() { 32. 33. return name; 34. 35. } 36. 37. 38. 39. public void setName(String name) { 40. 41. this.name = name; 42. 43. } 44. 45. 46. 47. public double getWeight() { 48. 49. return weight; 50. 51. } 52. 53. 54. 55. public void setWeight(double weight) { 56. 57. this.weight = weight; 58. 59. } 60. 61. // 自我介绍 62. 63. public void introduce(){ 64. 65. double v = new BigDecimal(weight).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue(); 66. 67. System.out.println("大家好!我叫"+this.name+",体重"+v); 68. 69. } 70. 71. // run 72. 73. public void run(){ 74. 75. introduce(); 76. 77. // 30天生活 78. 79. for (int i=0;i<30;i++){ 80. 81. lifeEveryday(); 82. 83. } 84. 85. introduce(); 86. 87. } 88. 89. // 抽象方法 lifeEveryday 90. 91. public abstract void lifeEveryday(); 92. 93. }
//Man类
1. package com.experiment05; 2. 3. 4. 5. public class Man extends Human{ 6. 7. public Man(String name, double weight) { 8. 9. super(name, weight); 10. 11. } 12. 13. public void lifeEveryday(){ 14. 15. // 男人每天吃饭和运动的场景 16. 17. // 晨练,体重减少0.1 18. 19. System.out.println(this.getName()+"晨练!"); 20. 21. this.setWeight(this.getWeight()-0.1); 22. 23. // 吃早饭,体重增加0.2 24. 25. System.out.println(this.getName()+"吃早饭!"); 26. 27. this.setWeight(this.getWeight()+0.2); 28. 29. // 吃午饭,体重增加0.3 30. 31. System.out.println(this.getName()+"吃午饭!"); 32. 33. this.setWeight(this.getWeight()+0.3); 34. 35. // 下午运动,体重减少0.3 36. 37. System.out.println(this.getName()+"运动!"); 38. 39. this.setWeight(this.getWeight()-0.3); 40. 41. // 吃晚饭,体重增加0.1 42. 43. System.out.println(this.getName()+"吃晚饭!"); 44. 45. this.setWeight(this.getWeight()+0.1); 46. 47. } 48. 49. }
//Woman类
1. package com.experiment05; 2. 3. 4. 5. public class Women extends Human{ 6. 7. public Women(String name, double weight) { 8. 9. super(name, weight); 10. 11. } 12. 13. public void lifeEveryday(){ 14. 15. // 女人每天吃饭和运动的场景 16. 17. // 晨跑,体重减少0.2 18. 19. System.out.println(this.getName()+"晨跑!"); 20. 21. this.setWeight(this.getWeight()-0.2); 22. 23. // 吃早饭,体重增加0.2 24. 25. System.out.println(this.getName()+"吃早饭!"); 26. 27. this.setWeight(this.getWeight()+0.2); 28. 29. // 吃午饭,体重增加0.3 30. 31. System.out.println(this.getName()+"吃午饭!"); 32. 33. this.setWeight(this.getWeight()+0.3); 34. 35. // 下午瑜伽运动,体重减少0.3 36. 37. System.out.println(this.getName()+"瑜伽运动!"); 38. 39. this.setWeight(this.getWeight()-0.3); 40. 41. // 吃晚饭,体重增加0.1 42. 43. System.out.println(this.getName()+"吃晚饭!"); 44. 45. this.setWeight(this.getWeight()+0.1); 46. 47. 48. 49. } 50. 51. }
//test类
1. package com.experiment05; 2. 3. 4. 5. public class test { 6. 7. public static void main(String[] args) { 8. 9. Man man = new Man("汤姆", 100); 10. 11. Women women = new Women("杰瑞", 80); 12. 13. Thread thread1 = new Thread(man); 14. 15. Thread thread2 = new Thread(women); 16. 17. thread1.start(); 18. 19. thread2.start(); 20. 21. } 22. 23. }
测试结果
总结
通过本次实验能编写并行执行的多线程程序,掌握Java多线程并行执行的过程,了解多线程生命周期和运行机制。