首頁(yè) 資訊 java多線程實(shí)現(xiàn)體重跟蹤

java多線程實(shí)現(xiàn)體重跟蹤

來(lái)源:泰然健康網(wǎng) 時(shí)間:2024年12月18日 13:59

2023-01-28 394 發(fā)布于黑龍江

版權(quán)

舉報(bào)

版權(quán)聲明:

本文內(nèi)容由阿里云實(shí)名注冊(cè)用戶自發(fā)貢獻(xiàn),版權(quán)歸原作者所有,阿里云開(kāi)發(fā)者社區(qū)不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。具體規(guī)則請(qǐng)查看《 阿里云開(kāi)發(fā)者社區(qū)用戶服務(wù)協(xié)議》和 《阿里云開(kāi)發(fā)者社區(qū)知識(shí)產(chǎn)權(quán)保護(hù)指引》。如果您發(fā)現(xiàn)本社區(qū)中有涉嫌抄襲的內(nèi)容,填寫(xiě) 侵權(quán)投訴表單進(jìn)行舉報(bào),一經(jīng)查實(shí),本社區(qū)將立刻刪除涉嫌侵權(quán)內(nèi)容。

簡(jiǎn)介: java多線程實(shí)現(xiàn)體重跟蹤

實(shí)驗(yàn)?zāi)康? 

1.掌握J(rèn)ava多線程并行執(zhí)行的過(guò)程;

2.了解多線程生命周期和運(yùn)行機(jī)制。

3.能編寫(xiě)并行執(zhí)行的多線程程序。

實(shí)驗(yàn)任務(wù)與要求

設(shè)計(jì)兩個(gè)人類對(duì)象(例如:男和女),通過(guò)每天吃東西和運(yùn)動(dòng),來(lái)計(jì)算他們生活一個(gè)月后的體重。

實(shí)驗(yàn)原理(技術(shù))

實(shí)驗(yàn)原理

多線程可以充分利用CUP資源,進(jìn)一步提升程序執(zhí)行效率。通過(guò)實(shí)現(xiàn),

Runnable接口能實(shí)現(xiàn)多線程。

Runnable接口創(chuàng)建并啟動(dòng)線程的步驟:

(1)創(chuàng)建一一個(gè)類實(shí)現(xiàn)Runnable接口;

(2)重寫(xiě)run()方法(線程要執(zhí)行的內(nèi)容) ;

(3)創(chuàng)建Thread類對(duì)象,將實(shí)現(xiàn)Runnable接口的類的對(duì)象做為參數(shù),傳遞

到Thread類的構(gòu)造方法中(Thread (Runnable runable))。

(4)通過(guò)Thread類對(duì)象調(diào)用start()方法開(kāi)啟線程。

實(shí)驗(yàn)記載  

步驟(算法、程序)、數(shù)據(jù)記錄與處理、結(jié)果分析等

//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. // 構(gòu)造方法 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. // 男人每天吃飯和運(yùn)動(dòng)的場(chǎng)景 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. // 下午運(yùn)動(dòng),體重減少0.3 36. 37. System.out.println(this.getName()+"運(yùn)動(dòng)!"); 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. // 女人每天吃飯和運(yùn)動(dòng)的場(chǎng)景 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. // 下午瑜伽運(yùn)動(dòng),體重減少0.3 36. 37. System.out.println(this.getName()+"瑜伽運(yùn)動(dòng)!"); 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. }

測(cè)試結(jié)果

總結(jié)

通過(guò)本次實(shí)驗(yàn)?zāi)芫帉?xiě)并行執(zhí)行的多線程程序,掌握J(rèn)ava多線程并行執(zhí)行的過(guò)程,了解多線程生命周期和運(yùn)行機(jī)制。

相關(guān)文章

java如何請(qǐng)求接口然后終止某個(gè)線程

通過(guò)本文的介紹,您應(yīng)該能夠理解如何在Java中請(qǐng)求接口并根據(jù)返回結(jié)果終止某個(gè)線程。合理使用標(biāo)志位或 `interrupt`方法可以確保線程的安全終止,而處理好網(wǎng)絡(luò)請(qǐng)求中的各種異常情況,可以提高程序的穩(wěn)定性和可靠性。

Java多線程編程的陷阱與解決方案####

本文深入探討了Java多線程編程中常見(jiàn)的問(wèn)題及其解決策略。通過(guò)分析競(jìng)態(tài)條件、死鎖、活鎖等典型場(chǎng)景,并結(jié)合代碼示例和實(shí)用技巧,幫助開(kāi)發(fā)者有效避免這些陷阱,提升并發(fā)程序的穩(wěn)定性和性能。 ####

Java中的線程池優(yōu)化實(shí)踐####

本文深入探討了Java中線程池的工作原理,分析了常見(jiàn)的線程池類型及其適用場(chǎng)景,并通過(guò)實(shí)際案例展示了如何根據(jù)應(yīng)用需求進(jìn)行線程池的優(yōu)化配置。文章首先介紹了線程池的基本概念和核心參數(shù),隨后詳細(xì)闡述了幾種常見(jiàn)的線程池實(shí)現(xiàn)(如FixedThreadPool、CachedThreadPool、ScheduledThreadPool等)的特點(diǎn)及使用場(chǎng)景。接著,通過(guò)一個(gè)電商系統(tǒng)訂單處理的實(shí)際案例,分析了線程池參數(shù)設(shè)置不當(dāng)導(dǎo)致的性能問(wèn)題,并提出了相應(yīng)的優(yōu)化策略。最終,總結(jié)了線程池優(yōu)化的最佳實(shí)踐,旨在幫助開(kāi)發(fā)者更好地利用Java線程池提升應(yīng)用性能和穩(wěn)定性。 ####

Java多線程編程的陷阱與最佳實(shí)踐####

本文深入探討了Java多線程編程中常見(jiàn)的陷阱,如競(jìng)態(tài)條件、死鎖和內(nèi)存一致性錯(cuò)誤,并提供了實(shí)用的避免策略。通過(guò)分析典型錯(cuò)誤案例,本文旨在幫助開(kāi)發(fā)者更好地理解和掌握多線程環(huán)境下的編程技巧,從而提升并發(fā)程序的穩(wěn)定性和性能。 ####

Java多線程編程中的陷阱與最佳實(shí)踐####

本文探討了Java多線程編程中常見(jiàn)的陷阱,并介紹了如何通過(guò)最佳實(shí)踐來(lái)避免這些問(wèn)題。我們將從基礎(chǔ)概念入手,逐步深入到具體的代碼示例,幫助開(kāi)發(fā)者更好地理解和應(yīng)用多線程技術(shù)。無(wú)論是初學(xué)者還是有經(jīng)驗(yàn)的開(kāi)發(fā)者,都能從中獲得有價(jià)值的見(jiàn)解和建議。 ####

Java中的多線程編程與并發(fā)控制

本文深入探討了Java編程語(yǔ)言中多線程編程的基礎(chǔ)知識(shí)和并發(fā)控制機(jī)制。文章首先介紹了多線程的基本概念,包括線程的定義、生命周期以及在Java中創(chuàng)建和管理線程的方法。接著,詳細(xì)講解了Java提供的同步機(jī)制,如synchronized關(guān)鍵字、wait()和notify()方法等,以及如何通過(guò)這些機(jī)制實(shí)現(xiàn)線程間的協(xié)調(diào)與通信。最后,本文還討論了一些常見(jiàn)的并發(fā)問(wèn)題,例如死鎖、競(jìng)態(tài)條件等,并提供了相應(yīng)的解決策略。

深入理解Java中的線程池實(shí)現(xiàn)原理及其性能優(yōu)化####

本文旨在揭示Java中線程池的核心工作機(jī)制,通過(guò)剖析其背后的設(shè)計(jì)思想與實(shí)現(xiàn)細(xì)節(jié),為讀者提供一份詳盡的線程池性能優(yōu)化指南。不同于傳統(tǒng)的技術(shù)教程,本文將采用一種互動(dòng)式探索的方式,帶領(lǐng)大家從理論到實(shí)踐,逐步揭開(kāi)線程池高效管理線程資源的奧秘。無(wú)論你是Java并發(fā)編程的初學(xué)者,還是尋求性能調(diào)優(yōu)技巧的資深開(kāi)發(fā)者,都能在本文中找到有價(jià)值的內(nèi)容。 ####

Java多線程并發(fā)編程:同步機(jī)制與實(shí)踐應(yīng)用

本文深入探討Java多線程中的同步機(jī)制,分析了多線程并發(fā)帶來(lái)的數(shù)據(jù)不一致等問(wèn)題,詳細(xì)介紹了`synchronized`關(guān)鍵字、`ReentrantLock`顯式鎖及`ReentrantReadWriteLock`讀寫(xiě)鎖的應(yīng)用,結(jié)合代碼示例展示了如何有效解決競(jìng)態(tài)條件,提升程序性能與穩(wěn)定性。

Java線程管理:守護(hù)線程與用戶線程的區(qū)分與應(yīng)用

在Java多線程編程中,線程可以分為守護(hù)線程(Daemon Thread)和用戶線程(User Thread)。這兩種線程在行為和用途上有著明顯的區(qū)別,了解它們的差異對(duì)于編寫(xiě)高效、穩(wěn)定的并發(fā)程序至關(guān)重要。

Java線程管理:守護(hù)線程與本地線程的深入剖析

在Java編程語(yǔ)言中,線程是程序執(zhí)行的最小單元,它們可以并行執(zhí)行以提高程序的效率和響應(yīng)性。Java提供了兩種特殊的線程類型:守護(hù)線程和本地線程。本文將深入探討這兩種線程的區(qū)別,并探討它們?cè)趯?shí)際開(kāi)發(fā)中的應(yīng)用。

目錄

實(shí)驗(yàn)?zāi)康?  實(shí)驗(yàn)任務(wù)與要求 實(shí)驗(yàn)原理(技術(shù)) 實(shí)驗(yàn)記載   測(cè)試結(jié)果

相關(guān)知識(shí)

【Node.js Vue】健康健身追蹤系統(tǒng),幫你解決運(yùn)動(dòng)計(jì)劃難題,實(shí)時(shí)跟蹤成效,讓每一次鍛煉都精準(zhǔn)有效【Node.js
REK體重跟蹤小程序介紹和使用說(shuō)明
java輸入性別身高體重計(jì)算體重指數(shù)
如何在《好體知》軟件中跟蹤體重的變化?
Java技能提升:破解“技能冷卻”,高效學(xué)習(xí)攻略揭秘
三星通過(guò)其健康應(yīng)用程序減少體重和卡路里攝入跟蹤
運(yùn)動(dòng)健康數(shù)據(jù)可視化:基于 Echarts 和 Java SpringBoot 的動(dòng)態(tài)實(shí)時(shí)大屏范例
MyFitnessPal v24.45.1 for Android 解鎖高級(jí)版 —— 一款全球相當(dāng)受歡迎的健康和健身跟蹤管理應(yīng)用
基于Android的健康飲食搭配應(yīng)用設(shè)計(jì)與實(shí)現(xiàn)
健康飲食瘦身跟蹤

網(wǎng)址: java多線程實(shí)現(xiàn)體重跟蹤 http://www.u1s5d6.cn/newsview622010.html

推薦資訊