做業五是當前最後一次電梯做業,也是咱們第一次接觸到多線程編程,輸入方式也由以前的一次性輸入變爲了實時輸入,其中涉及到大量的同步和衝突,其中學習多線程的使用也花了大量的時間,但總的來講爲之後的做業打下了基礎。git
從上述分析來看,這次做業仍然存在God類,究其緣由主要是由於第一次接觸多線程,使用不熟練,致使對電梯使用多線程時不敢將太多邏輯置於電梯類中,從而致使了大量邏輯代碼都留在了調度類中,但調度類中的方法較之於以前已經更加詳細具體了,方法之間已經儘可能作到了高內聚低耦合。編程
因爲從第一次作電梯做業開始,我就是使用的模擬的方式,因此程序總體的邏輯上沒有進行大的修改,但因爲這次多線程的使用,尤爲是多臺電梯之間捎帶和請求分配之間的問題,依然存在着不小的問題,因此到最後提交時,依然存在着bug————調度類中邏輯較爲複雜,並且因爲多線程控制不到位,對於請求隊列沒有徹底實現線程安全,致使會出現多個電梯同時分到同一個請求的狀況發生。但因爲修改量的巨大,因此未能完成修改,而測試者也將爲完成的修改形成的bug找了出來。
除此以外,這次做業的時間控制也不夠精確,這次做業沒有考慮到程序執行帶來的大量偏差,直接採用了sleep(3000)的方式,致使隨着程序的運行,偏差會愈來愈大,以致於超過偏差限度。
但這次做業也第一次採用了構建一個State類的方式,將經常使用到的狀態量定義爲常量,極大的提升了代碼總體的可閱讀性。
安全
做業六是要求實現一個簡單的ifttt,將咱們所學內容與實際運用結合了起來,但因爲對於文件操做的不熟練,在編寫代碼時也遇到了不小的問題。多線程
這次做業代碼量和風格的控制較於第五次做業有了較大的提高,同時對於多線程也可以較爲熟練的運用了,這次做業的自由度較之於以前的做業也有所提升,故readme的書寫也應該被逐漸重視起來。
這次做業被找出了一個bug,但嚴格意義上來講並不能算是bug————在編寫代碼的時候發現一個問題,若是對於兩個除了名稱其他徹底相同的文件,如a,b,若是在兩次掃描週期中咱們將b重命名爲c,將a重命名爲b,對於程序來講其實並很差判斷其到底是上述操做仍是直接將a重命名爲了c,因此我在readme中定義若是發現有重命名,並且有多個符合要求的文件,那麼我會隨機選一個視爲修改,對於其餘的,例如路徑移動也是同理。但測試者可能由於沒有仔細閱讀個人readme,因此報了幾個bug,所有都是由於這個緣由。同時我測試的同窗也考慮到了相似的事情,但他的readme中定義方式爲對於上述這種狀況,不能在同一個週期內同時操做兩個除了文件名其他屬性均相同的文件。代碼中實現方式爲將上一次掃描中沒有出現的文件做爲修改後的文件,能夠說徹底杜絕了這種狀況的發生。在最後考慮到本身在readme中定義的是出現了某種狀況應該怎麼解釋,而不是如何避免出現這種容易致使矛盾的操做,因此我最後也贊成留下一個bug。
總的來講,這次做業是比較熟練地使用了多線程編程,但仍有一些沒有考慮充分的地方,在之後的做業中也能夠多注意一下這一塊。
eclipse
此次做業是第一次出租車做業,相對於以前的幾個線程,這次直接將出租車數量提升到了100個,對於此我是採用了開了100個出租車線程來解決,但同時也帶來了內存佔用巨大的結果,也有同窗採用僞多線程的方式(如我測試的同窗),採用循環來執行這100個出租車。對於此種方式我認爲也算是一種解決問題的方式,但也難以鍛鍊本身多線程編程的能力,尤爲是對於線程安全的控制,因此在之後的做業中我依然會採用100個出租車線程的方式。
學習
這次做業的代碼風格算是這麼屢次做業以來最好的一次,加之這次也較爲強調代碼規範問題,因此總體來看代碼基本能實現一看就懂的程度了。
但這次做業也是最不甘心的一次,可是多是由於eclipse的bug,我最後一次提交時,本地顯示已經提交了,但git上並無提交,因此最後互測的時候交的是一個錯誤的版本,致使了這次做業的bug都是本來可以避免的。同時因爲這次做業最開始沒有發現本身的代碼沒有成功上傳,因此在互測時測試者發現的bug在我這徹底不能復現,甚至讓我懷疑對方是在惡意找bug,不過好在最後發現及時(就沒來得及進行代碼層面之外的交流了)但也給我提醒了之後在上傳了代碼之後最好可以再下載一遍以確認是否正確。
這次做業作得比較好的一點(雖然最後代碼沒傳上去)是時間控制,我一直都採用的系統時間,沒有進行假時間的操做,因此這次在State類中我能夠說是本身定義了一系列新的時間方法,例如sleep時首先將當前時間進行計算,計算出真實的須要sleep的時間後再執行,能夠說這次做業在時間上的偏差是嚴格限制在了偏差範圍之類的。
測試
這幾回做業都是多線程做業,隨着幾回做業的進行,我對於多線程的運用也逐漸熟悉了起來,同時代碼風格和規範也獲得了不小的提高,像以前做業中的每次新的做業基本都要重寫一遍代碼的狀況能夠說基本也不會再出現了。但願本身在後面的學習中可以獲得更大的提高。線程