閱讀89 返回首頁    go 阿裏雲 go 技術社區[雲棲]


Java並發/多線程教程——1

本係列譯自jakob jenkov的Java並發多線程教程,個人覺得很有收獲。由於個人水平有限,不對之處還望矯正!

    在早期,計算機隻有一個CPU,同一時刻隻能執行一個程序,後來有了多任務的說法,多任務是指計算機在同一時刻可以執行多個程序,但這並不是真正意義上的同一時刻,單個CPU 被多個程序共用,操作係統會在運行的運行的程序間相互切換。在相互切換之前會短暫的執行其中的一個。

  隨著多任務的產生,給程序開發人員帶來了新的挑戰。程序不能再假定擁有所有的CPU 時間,不能再假定它擁有所有的內存空間和計算機的其他資源。一段好的程序應該釋放掉不再使用的資源,以至於其他程序能夠使用這些資源。再此之後又出現了多線程,這意味著在同一程序中可以有多個線程執行,一個線程的執行可以認為一個CPU在執行這段程序,當有多個線程執行時可被視作多個CPU 在執行這個程序。

 多線程被視作可以提升程序性能的一種很好的方式,但是相對於多任務,多線程帶來了更多的挑戰。同一個程序內部多個線程同一時刻執行,這就意味著他們同時讀寫內存,這樣就會出現在單線程下不會產生的錯誤,而這些錯誤不會出現在單CPU 的計算機上,因為在單CPU 的計算機上,同一時刻,多個線程並不是真的都在執行,現代計算機有多核,甚至於有些計算機擁有多CPU,這就意味著不同的線程可以同時被不同的核或是不同的CPU 執行。

如果一個線程從內存區域讀一個值的時候,另一個線程正在向內存區域寫這個值的時候,那麼讀的線程最終會讀到什麼結果呢?原來的值?還是被另一個線程修改後的值呢?如果沒有合適的保證措施,這些值都是有可能讀到的。這種行為不可預知,結果可能隨時都在變。因此,作為一個程序員,對正確對結果的預測是非常重要的!這就意味著程序員要學會怎麼去控製線程對諸如內存、文件、數據庫等這些共享資源的訪問。

**Java中的多線程和並發**
Java 是讓程序員很容易實現多線程的語言之一。java 自從開始之初就有多線程的能力,因此java 開發人員經常麵對上麵所說的問題。

_

最後更新:2017-06-25 22:04:11

  上一篇:go  scikit-learn學習之神經網絡算法
  下一篇:go  阿裏雲上Docker企業版之旅