Java並發性和多線程介紹

來源:互聯網
上載者:User

標籤:程式   read   target   自己的   介紹   href   com   記憶體   系統方面   

以下內容轉自http://ifeve.com/java-concurrency-thread/:

在過去單CPU時代,單任務在一個時間點只能執行單一程式。之後發展到多任務階段,電腦能在同一時間點並存執行多任務或多進程。雖然並不是真正意義上的“同一時間點”,而是多個任務或進程共用一個CPU,並交由作業系統來完成多任務間對CPU的運行切換,以使得每個任務都有機會獲得一定的時間片運行。

隨著多任務對軟體開發人員帶來的新挑戰,程式不在能假設獨佔所有的CPU時間、所有的記憶體和其他電腦資源。一個好的程式榜樣是在其不再使用這些資源時對其進行釋放,以使得其他程式能有機會使用這些資源。

再後來發展到多線程技術,使得在一個程式內部能擁有多個線程並存執行。一個線程的執行可以被認為是一個CPU在執行該程式。當一個程式運行在多線程下,就好像有多個CPU在同時執行該程式。

多線程比多任務更加有挑戰。多線程是在同一個程式內部並存執行,因此會對相同的記憶體空間進行並發讀寫操作。這可能是在單線程程式中從來不會遇到的問題。其中的一些錯誤也未必會在單CPU機器上出現,因為兩個線程從來不會得到真正的並存執行。然而,更現代的電腦伴隨著多核CPU的出現,也就意味著不同的線程能被不同的CPU核得到真正意義的並存執行。

如果一個線程在讀一個記憶體時,另一個線程正向該記憶體進行寫操作,那進行讀操作的那個線程將獲得什麼結果呢?是寫操作之前舊的值?還是寫操作成功之後的新值?或是一半新一半舊的值?或者,如果是兩個線程同時寫同一個記憶體,在操作完成後將會是什麼結果呢?是第一個線程寫入的值?還是第二個線程寫入的值?還是兩個線程寫入的一個混合值?因此如沒有合適的預防措施,任何結果都是可能的。而且這種行為的發生甚至不能預測,所以結果也是不確定性。

Java是最先支援多線程的開發的語言之一,Java從一開始就支援了多線程能力,因此Java開發人員能常遇到上面描述的問題情境。這也是我想為Java並發技術而寫這篇系列的原因。作為對自己的筆記,和對其他Java開發的追隨者都可獲益的。

該系列主要關注Java多線程,但有些在多線程中出現的問題會和多任務以及分布式系統中出現的存在類似,因此該系列會將多任務和分布式系統方面作為參考,所以叫法上稱為“並發性”,而不是“多線程”。

Java並發性和多線程介紹

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.