OO第二次總結

做業5----多線程電梯

 

第五次做業是多線程電梯,而且要求知足捎帶和運動量均衡的原則。在設計的時候,個人想法就是主要寫一個電梯類來封裝電梯的屬性,好比所在樓層、運動方向、目標樓層、運動量等等,以後在經過一個調度類來調度指令給三部電梯,從而完成電梯的共同運做。算法

上圖中的Request類用來處理需求,主要是檢查格式問題、輸入值的範圍問題等等,以後把處理過的指令傳到Queue類中,Queue類儲存指令而後分類,再分別存入Global類中,這裏的Global是用來儲存全局變量的地方,由於考慮到像指令這樣的東西不免要被三部電梯去搶用,因此我想把他們存在這裏方便鎖起來。MultiScheduler是調度器,主要用來檢測三個電梯的運動量什麼的。由於當時尚未想到把電梯類的三個對象做爲參數傳入其中,因此致使代碼冗長並且出現了BUG。StrDispose類主要的做用是進行字符串的處理,來分解指令,裏面存了一些方法去處理字符串,避免寫重複的代碼。多線程

此次做業個人run函數過於長,由於對於多線程的使用還不熟悉,其實有不少run裏面的內容能夠提煉到外面的方法中,但又由於懼怕出錯而放棄了。並且個人時間用了系統的真正的時間沒去用假時間,因此在時間上運行以後會I有偏差,本身也沒作複雜的精度處理,因此在時間的問題上也出了BUG。函數

 

做業6----文件監管系統

 

此次做業是文件監管系統,去監管文件的狀態是否發生了變化。由於對於這方面很陌生並且把它想的過於複雜,因此好久以後才動筆去寫,寫的過程當中發現其實這個程序和我想的很不同,主要是監管目錄的那一塊,目錄的變化要經過裏面的文件的變化才能體現,但我發現時已經爲時過晚,遂放棄之,致使目錄的監管幾乎沒怎麼實現,這一會兒致使我被找到了無數多的BUG......測試

此次做業也是寫的不怎麼美麗,再處理完請求以後就直接用一個BuildThread的類去生成了一個對應的線程,能夠說毫無章法可言,在鎖的方面只把輸出的部分加了鎖。總之寫的很差。ui

做業7----出租車

 

第七次做業是寫一個出租車的調度系統,感受這個調度系統的功能也比較完善,能夠支持最短路徑,而且用上了信用度的概念。我此次做業把主要的東西都放到了Taxi類中,這也致使個人Taxi類過於龐大,測試者也就這個問題報了個人設計缺陷,引覺得戒。線程

上圖中的ReadMap用來讀地圖而且去檢測地圖的格式是否有問題,Request類用來讀入請求並檢查請求的格式,Scheduler類用來接收請求並對每個請求生成一個對應的線程,其生命週期爲3s。在程序開始時,我先生成了100個出租車線程讓他們隨意的去跑,以後Scheduler類生成的線程回去檢索這100個出租車構成的隊列,尋找是否有出租車而且找到最優的那一個,而且調度線程能夠改變出租車的運動狀態,並將一些參數,好比時間、出發地和目的地等傳入其中,此次在時間上我用了假時間,這樣在測試中能夠保證時間是以200ms穩定遞增的。設計

在搜索最短路徑的問題上我借鑑了給的GUI裏面的bfs算法,由於這個算法跑遍地圖上6400個點的時間太長,因此我只在須要的時候去跑一個特定的點。每收到一個指令,其實只須要去跑出發點和目的地兩個地方,因此我把它們分別放到出租車和調度器的等待時間中去跑,以免出現很大的時間偏差。3d

輸出方面我也是分別放到調度器和出租車中去輸出,分別輸出乘客的信息和出租車的信息並存入到一個文件中去,給輸出的代碼塊上了鎖,防止某個輸出輸出到一半被打斷。輸出到一個文件的時候因爲可能同時存在多個出租車,因此並非按照一輛車一段輸出而輸出的,會很雜。對象

 

總結

從開始對多線程的一頭霧水到如今可以勉強使用它並跑出比較正確的結果,我以爲已經算是不小的長進。上次OO上機的時候用到的新東西給了我很大的啓發,也讓我明白到本身如今掌握的多線程的知識還只是九牛一毛,距離真正的在大型工程中去應用還差了很遠。因此我在想下次寫做業能不能試着用一些除了sleep,start,sychronized以外的東西來充實本身的多線程。blog

相關文章
相關標籤/搜索