1、多線程的協同和同步控制方面java
在我對多線程協同的認識中,線程有可能只對工做內存中的副本進行賦值,只到最後一次賦值後才同步到主存儲區,總的來講,在足夠長時間的運行後,各個線程對共享資源的調度順序都是超乎想象的。而保證線程按序進行的重要手段就是synchronized,java用synchronized關鍵字作爲多線程併發環境的執行有序性的保證手段之一。當一段代碼會修改共享變量,這一段代碼成爲互斥區或臨界區,爲了保證共享變量的正確性,synchronized就標示了臨界區。也能夠理解爲同一時間,只能有一個線程來訪問、調用synchronized修飾的方法或代碼塊。同時也能夠在線程所在代碼中設定計數器來肯定每過固定時間來修改共享資源。抑或是設立共同clock類來同步多個線程的時間。編程
2、度量分析
安全
通過第一階段的代碼分析以及昂神給你們分享的代碼規範以後,感受本身的代碼風格仍是有改善的,避免了過長的類和重複冗餘的代碼塊,儘可能利用方法將各個類、變量整合。多線程
3、BUG分析併發
這三次做業個人bug集中在同質處理、複雜請求的處理上,前者是由於太懶,coding前期每每不須要考慮同質,而到了星期三的時候又懶得加同質判斷......然後者是由於在線程同步中,每輪運算會產生一些偏差,在被大佬的巨多的數據輸入後會出現運行偏差。eclipse
而對於測試其餘同窗的bug,目前尚未發現一些特別有價值的bug,主要仍是集中在一些輸出狀況下格式錯誤、未考慮同質等等常規輸出。測試
4、心得體會操作系統
經過這三次的面向對象做業,咱們基本上對線程安全有了必定的認識。我感受本身對線程的理解還須要提高,線程是進程中的一個實體,是被系統獨立調度和分派的基本單位,線程本身不擁有系統資源,只擁有一點兒在運行中必不可少的資源,這些知識咱們在操做系統還有計算機組成原理中都有所瞭解,可是將其具體到java代碼中仍是有必定難度的。線程計算和咱們常規的計算思惟是不一樣的,其運行順序的不肯定性和計算時間的不定長每每會形成不可復現的bug。總而言之,面向對象編程中還有許許多多和常規思惟不一樣的地方,只有coding才能讓問題真正暴露出來。線程
關於bug調試方面這幾回也受益頗多,這三次做業的在coding時的bug主要集中在線程不一樣步、資源不共享、線程相互阻塞等等問題,這些bug我的認爲用print來debug是最佳的,eclipse等IDE調試時沒法具體體現時間線上各個變量的變化,而print則能夠徹底避免。debug