【java多線程的代價】

來源:互聯網
上載者:User

標籤:google   java   java學習   java面試題   android   

原文連結:http://tutorials.jenkov.com/java-concurrency/costs.html

Jakob Jenkov     翻譯:古聖昌        校對:歐振聰

java中從一個單線程的應用到一個多線程的應用並不僅僅帶來好處,它也會有一些代價。不要僅僅為了使用多線程而使用多線程。而應該明確在使用多線程時能多來的好處比所付出的代價大的時候,才使用多線程。java學習中如果存在疑問,應該嘗試測量一下應用程式的效能和響應能力,而不只是猜測。

設計更複雜

雖然有一些多線程應用程式比單線程的應用程式要簡單,但其他的一般都更複雜。在多線程訪問共用資料的時候,這部分代碼需要特別的注意。線程之間的互動往往非常複雜。不正確的線程同步產生的錯誤非常難以被發現,並且重現以修複。

環境切換的開銷

當CPU從執行一個線程切換到執行另外一個線程的時候,它需要先儲存當前線程的本地的資料,程式指標等,然後載入另一個線程的本機資料,程式指標等,最後才開始執行。這種切換稱為“環境切換”(“context switch”)。CPU會在一個上下文中執行一個線程,然後切換到另外一個上下文中執行另外一個線程。

環境切換並不廉價。如果沒有必要,應該減少環境切換的發生。

你可以通過維基百科閱讀更多的關於環境切換相關的內容:

http://en.wikipedia.org/wiki/Context_switch

增加資源消耗

線程在啟動並執行時候需要從電腦裡面得到一些資源。除了CPU,線程還需要一些記憶體來維持它本地的堆棧。它也需要佔用作業系統中一些資源來管理線程。我們可以嘗試編寫一個程式,讓它建立100個線程,這些線程什麼事情都不做,只是在等待,然後看看這個程式在啟動並執行時候佔用了多少記憶體。

【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.