OO第五次做業-多線程電梯安全
一、做業分析
多線程
此次做業和前兩次不一樣之處在於多線程的使用,也由此引入了線程的安全性問題,給此次做業形成了必定的麻煩。因爲採用多線程,就不能用前兩次的方式,先將請求所有輸入再進行相關計算,須要一邊運行一邊計算,所以捨棄了前兩次的架構,基本上從新開始規劃此次的做業。採用了模擬時間的方式和生產者消費者的模型,構造公有對象請求隊列做爲托盤,調度器和請求輸入線程分別做爲消費者和生產者。架構
二、做業類圖測試
三、度量分析spa
果真Scheduler類和電梯類的方法仍是須要梳理一下,if等邏輯嵌套有點多,致使複雜度太高。線程
四、UML Sequence設計
五、Bug分析3d
此次出現了兩個bug。一是由於有幾段判斷的代碼差很少,直接複製過來結果忘了修改部分變量名,致使判斷出了問題;二是主指令結束時捎帶的臨界條件忘記判斷了,致使額外捎帶了指令。對象
這兩個bug修改起來都是小問題,也就是一行代碼的事情,在寫的時候仍是忽略了這些細節。也是由於有些懈怠了,清明放假出去浪了一圈,回來的時候匆匆忙忙地趕完了做業。之後仍是要注意。blog
OO第六次做業-監控文件
一、做業分析
此次做業再也不是電梯(從這之後坐電梯不再擔憂了~),而是變成了對目錄文件的監控。不過也由於這樣,此次做業對線程安全性的要求變高了,不像第五次的多線程電梯那樣沒有多少須要注意安全性問題的。
此次一共有4個觸發器3個任務,我按照一個觸發器搭配一個任務的方式開線程,所以最多會有3*4*10=120個線程。但也由於這一點,處理recover和record的時候因爲JVM處理多線程的方式會出現一些合理的狀況。根據指導書的要求,構造了SafeFile這一個文件安全類,來使Java自帶的不安全的File類變得安全。
此次的做業思考難度並不大,不像電梯同樣考慮不少狀況,只須要定時掃描就行了,惟一須要注意的就是線程的安全問題,只要這一方面處理好了就基本不會出現問題了。
二、做業類圖
三、度量分析
整體來看複雜度還好,仍是for、if、switch等等的嵌套太多,若是把這些判斷拆成一個個方法又感受沒什麼必要,糾結。
四、UML Sequence
五、Bug分析
此次被發現了兩個bug。一是因爲此次做業不測格式便對輸入放寬了要求,沒有用正則,也忘了try-catch,致使輸入不合規範的時候會crash,果真仍是不能放鬆警戒啊;二是線程安全性問題,因爲SafeFile類建立對象時,不管以前這個路徑的文件的對象有沒有被建立過,我都會直接建立新的對象。這就致使了我SafeFile中的同步在測試線程中根本沒有用,由於測試線程中的SafeFile對象徹底就是新的,還有就是在掃描過程當中鎖的釋放時機沒有把控好,在整個掃描過程當中已經掃描過的文件不該該釋放鎖,否則掃描過的文件在掃描過程當中發生改變會出現問題。
雖然被找到了bug,但仍是以爲本身並無損失什麼,畢竟從測試者那裏學到了處理線程安全的知識,就至關於用分數換知識了,不虧。
OO第七次做業-出租車
一、做業分析
此次是出租車這一大型連續做業的開端(之後不再坐出租車了),並且不像電梯同樣從單線程過分,而是直接由多線程開始,不過有了前兩次的基礎,再加上本次是出租車的第一次做業,難度不是特別大。
我是按照請求尋找出租車來進行設計的,每個請求開一個線程,尋找可以搶單的出租車,同時每輛出租車也是一個線程,進行相關的移動。所以出租車對象是公有對象,須要對其上鎖防止請求線程和出租車線程同時對出租車對象進行操做。請求線程運行3s以後就從搶單的出租車列表裏面篩選出最合適的出租車,並將該請求分配出去,在這個過程當中就須要鎖住出租車對象,防止其餘請求線程對出租車的狀態進行改變。
二、做業類圖
三、度量分析
觀察了一下,複雜度高的那幾個方法是本身寫的BFS,裏面有try,if,while,for,switch的嵌套,所以致使了複雜度高,但一樣的既然是BFS,感受沒有必要將BFS再進行拆分,所以就這樣保留了下來。
至於TaxiScheduler類中的Schedule方法,確實能夠進行拆分。一開始是將其中的部分代碼放在了一個方法中,但後來進行了修改,便沒有再單獨開一個方法了.....仍是由於懶。
四、UML Sequence
五、Bug分析
此次卻是沒有發現什麼Bug。本身測試本身的代碼的時候曾發現了一個Bug,會致使輸出多輸出一些東西,後來發現是wait()和sleep()使用錯誤的緣由,原本不該該釋放鎖的地方我卻用wait()釋放了鎖,改爲sleep()以後就消除了這個bug。
心得體會
不得不說,OO帶給個人壓力比計組還大,讓人心力憔悴,筋疲力竭。但在這種高壓的環境下,也確實是學到了好多的知識,只能說是有利有弊吧。聽說以後的OO的做業的難度沒有之前那麼大了,但我總感受是在欺騙人,更況且第九周開始週三就有金工實習了,一想起來就心累。雖然累,但當本身交上去的做業沒有被發現bug的時候以爲累的也是有價值的。就這樣且行且珍惜這段OO的時光吧。