Java 并發(fā)/多線程教程(一)

? ? ? ? ? 本系列譯自jakob jenkov的Java并發(fā)多線程教程,個人覺得很有收獲。由于個人水平有限,不對之處還望矯正!

? ? ? ? 在早期,計算機只有一個CPU,同一時刻只能執(zhí)行一個程序,后來有了多任務的說法,多任務是指計算機在同一時刻可以執(zhí)行多個程序,但這并不是真正意義上的同一時刻,單個CPU 被多個程序共用,操作系統(tǒng)會在運行的運行的程序間相互切換。在相互切換之前會短暫的執(zhí)行其中的一個。

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

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

圖片發(fā)自簡書App

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

Java中的多線程和并發(fā)

? Java 是讓程序員很容易實現(xiàn)多線程的語言之一。java 自從開始之初就有多線程的能力,因此java 開發(fā)人員經常面對上面所說的問題。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 從三月份找實習到現(xiàn)在,面了一些公司,掛了不少,但最終還是拿到小米、百度、阿里、京東、新浪、CVTE、樂視家的研發(fā)崗...
    時芥藍閱讀 42,814評論 11 349
  • 1. Java基礎部分 基礎部分的順序:基本語法,類相關的語法,內部類的語法,繼承相關的語法,異常的語法,線程的語...
    子非魚_t_閱讀 34,734評論 18 399
  • Java-Review-Note——4.多線程 標簽: JavaStudy PS:本來是分開三篇的,后來想想還是整...
    coder_pig閱讀 1,772評論 2 17
  • 第1章 并發(fā)編程的挑戰(zhàn) 1.1 上下文切換 即便是單核CPU也支持多線程并發(fā),CPU通過給每個線程分配時間片(幾十...
    卑鄙的鹿尤菌閱讀 4,915評論 1 22
  • 溫暖的陽光灑在臉上,帶著女兒出發(fā)看恐龍。空氣中彌漫著濃濃的幸?!改忝刻於歼@么開心快樂。2周9你自己走都不...
    一婷一閱讀 239評論 0 0

友情鏈接更多精彩內容