第二次OO总结
?
寫在前面
在學習完成了面向對象的基本思想后,我們的面向對象課程進入了第二階段的學習過程:多線程編程。多線程處理可以同時運行多個線程。由于多線程應用程序將程序劃分成多個獨立的任務,因此可以顯著提高性能。多線程技術使程序的響應速度更快,當前沒有進行處理的任務時可以將處理器時間讓給其它任務。但是,多線程需要協調和管理,線程太多會導致控制太復雜,最終可能造成很多Bug。這三次的作業,就讓我對多線程有了更加深刻地認識。
正文
第五次作業
總述
這一次的作業是在前面兩次作業的基礎上,改變了電梯數量和實現方式,要求使用多線程來實現對電梯的調度,以及電梯對請求的響應。雖然在功能上沒有什么改變,但是由于多線程的要求,在實現過程中我遇到了許多困難。
類圖:
度量分析:
分析
此次作業我在線程的run方法中寫了太多的功能,導致程序執行起來非常緩慢。另外,由于沒有對線程增加一些合適的同步控制方法,我的程序在運行起來有著很多的不確定性,經常會出現對同一測試用例,每次運行的結果都不相同。甚至,程序有時候會莫名的crash。這些都是因為自己沒有對多線程做出很好的控制。
這次作業我也被找出了五個bug。其中有一個是格式問題,由于自己正則表達式是對一行就行匹配處理,所以自己的程序對于一行有多條指令的情況時,沒有過濾掉非法指令,只處理正確的指令。另外的幾個bug都是因為多線程導致的不確定性,特別是執行順序的不確定性導致對于同質請求的判斷出現問題。
我的心得體會
多線程雖然可以提高程序的執行效率,但是編寫多線程程序的難度遠遠大于單一線程的程序。這次作業,更是讓我深刻體會到了多線程的玄學之處。還有最重要的是,多線程程序在尋找修改bug的時候非常困難,一般的調試方法是行不通的。
第六次作業
總述
這次作業是讓我們體會多線程安全的處理方法,如何才能寫出線程安全的類,使得程序的運行結果確定可控,是這次作業的重點。本次作業的目標是訓練同學們針對線程安全問題,如何平衡線程訪問控制和共享對象之間的矛盾。作業內容是實現一個監控程序,針對給定監控范圍內的監控對象,以掃描方式探查監控對象相關屬性的變化,從而觸發規定的處理動作。
類圖:
度量分析:
從上面可以看出,對監控范圍的掃描在很大程度上影響了程序的效率。
作業分析
這次作業的難度,筆者個人認為是比上一次作業簡單的,可能是因為我們學習了如何去控制線程的安全。此次作業,主要就是要建立一個線程安全的safefile類,確保在對文件進行操作的時候,不進行掃描。以及對于監控范圍建立快照,確定掃描周期,使得可以按照一定頻率去進行掃描,對比前后兩次的快照,從而檢測到文件的變化。
這次作業主要出現的問題就是recover操作帶來的影響,也就是recover操作可能會讓其它線程也檢測到變化,從而得到不必要的響應。作業也必須確定合適的掃描周期,從而可以實現對較大深度和較大廣度目錄的檢測。
心得體會
這次作業總的來說,實現的功能較為簡單,只要你能夠構件號線程安全的類,并且控制好掃描頻率,就可以很好的完成這次作業。另外,這次作業也讓我對java的文件操作更加熟悉。對于線程的控制更加得心應手。
第七次作業
總述
第七次作業主要考察的是我們的設計風格,以及程序的編寫規范,培養我們對于程序的規范性認識。作業要求我們模擬出租車的乘客呼叫與應答系統,設置100輛出租車,對于乘客的請求進行處理。這次作業也擁有至少100個線程,如果沒有很好的設計,程序執行起來會顯得效率十分低下。通過對這次作業的完成,我明白了從初始就構造一個好的設計尤為重要。
類圖:
度量分析
作業分析
通過上面的度量分析可以看出,我的window類的復雜的較高,原因就在于,我把判斷調度出租車的方法全部寫到了這個類當中。這次作業總的來說難度不大,就是為了考察我們的設計方法以及代碼規范。通過對需求分析文檔的編寫,我在開始編寫代碼之前,就有了明確的任務和思路。另外,由于那12項設計原則的限制,我這次作業的代碼層析更加清晰,各個類分工很明確,代碼的可讀性、可移植性也很高。
感悟
經過四次課程的學習和三次作業的磨練,我對于多線程編程思想有了初步的了解,明白了如何去編寫線程安全的程序,還懂得了許多設計規則,讓我對面向對象編程思想的理解也更加深刻。我非常期待接下來的學習。
轉載于:https://www.cnblogs.com/jy0205/p/8980748.html
總結
- 上一篇: ZOJ 3879(大模拟)
- 下一篇: spark学习流程