更新時間:2022-03-03 16:27:53 來源:動力節點 瀏覽1903次
Java并發是一個涵蓋Java平臺上的多線程、并發和并行性的術語。這包括Java并發工具、問題和解決方案。本Java并發教程涵蓋了與Java中的多線程相關的多線程、并發構造、并發問題、成本和收益的核心概念。
如果您喜歡看視頻,小編這里到是有全套的Java視頻教程,其中涵蓋了本教程系列涵蓋的一些相同主題。您可以在此處找到視頻播放列表:
多線程意味著您在同一個應用程序中有多個執行線程。線程就像執行應用程序的獨立CPU。因此,多線程應用程序就像具有多個CPU同時執行代碼的不同部分的應用程序。
但是,線程不等于CPU。通常單個CPU將在多個線程之間共享其執行時間,在給定時間內執行每個線程之間切換。也可以讓應用程序的線程由不同的CPU執行。
關于為什么要在應用程序中使用多線程有幾個原因。多線程的一些最常見原因是:
我將在以下各節中更詳細地解釋這些原因。
最常見的原因之一是能夠更好地利用計算機中的資源。例如,如果一個線程正在等待對通過網絡發送的請求的響應,那么另一個線程可以同時使用CPU來做其他事情。此外,如果計算機有多個CPU,或者CPU有多個執行內核,那么多線程還可以幫助您的應用程序利用這些額外的CPU內核。
如果計算機包含多個CPU或CPU包含多個執行核心,那么您需要使用多個線程讓您的應用程序能夠利用所有CPU或CPU核心。單個線程最多只能使用單個CPU,而且正如我上面提到的,有時甚至不能完全使用單個CPU。
使用多線程的另一個原因是提供更好的用戶體驗。例如,如果您單擊GUI中的按鈕并導致通過網絡發送請求,那么執行此請求的線程很重要。如果您使用也更新GUI的同一線程,那么當GUI線程等待請求的響應時,用戶可能會遇到GUI“掛起”。相反,這樣的請求可以由后臺線程執行,因此GUI線程在此期間可以自由地響應其他用戶請求。
第四個原因是在用戶之間更公平地共享計算機資源。例如,假設一臺服務器接收來自客戶端的請求,并且只有一個線程來執行這些請求。如果一個客戶端發送一個需要很長時間來處理的請求,那么所有其他客戶端的請求都必須等到一個請求完成。通過讓每個客戶端的請求由其自己的線程執行,那么沒有單個任務可以完全獨占CPU。
在過去,計算機只有一個CPU,一次只能執行一個程序。大多數小型計算機的功能并不足以同時執行多個程序,因此沒有嘗試過。公平地說,與個人計算機相比,許多大型機系統能夠一次執行多個程序多年。
后來出現了多任務處理,這意味著計算機可以同時執行多個程序(AKA任務或進程)。不過,這并不是真正的“同時”。單個CPU在程序之間共享。操作系統會在運行的程序之間切換,在切換之前執行它們中的每一個。
隨著多任務處理,軟件開發人員面臨新的挑戰。程序不能再假定所有可用的CPU時間、所有內存或任何其他計算機資源都可用。一個“好公民”程序應該釋放它不再使用的所有資源,以便其他程序可以使用它們。
后來出現了多線程,這意味著您可以在同一個程序中擁有多個執行線程。執行線程可以被認為是執行程序的CPU。當您有多個線程執行同一個程序時,就像在同一個程序中執行多個CPU一樣。
多線程是提高某些類型程序性能的好方法。然而,多線程比多任務更具挑戰性。線程在同一個程序中執行,因此同時讀取和寫入相同的內存。這可能導致在單線程程序中看不到的錯誤。其中一些錯誤在單CPU機器上可能看不到,因為兩個線程從未真正“同時”執行。但是,現代計算機配備了多核CPU,甚至還配備了多個CPU。這意味著不同的線程可以同時由不同的內核或CPU執行。
如果一個線程讀取一個內存位置而另一個線程寫入它,那么第一個線程最終會讀取什么值?舊值?第二個線程寫入的值?還是兩者混合的價值?或者,如果兩個線程同時寫入同一個內存位置,完成后會留下什么值?第一個線程寫入的值?第二個線程寫入的值?還是兩個值的混合寫入?
如果沒有適當的預防措施,任何這些結果都是可能的。這種行為甚至無法預測。結果可能會不時改變。因此,作為開發人員,了解如何采取正確的預防措施非常重要——這意味著學習控制線程如何訪問共享資源,如內存、文件、數據庫等。
以上就是動力節點小編介紹的"Java并發的系統學習視頻,一天即可掌握",希望對大家有幫助,如有疑問,請在線咨詢,有專業老師隨時為您服務。
0基礎 0學費 15天面授
有基礎 直達就業
業余時間 高薪轉行
工作1~3年,加薪神器
工作3~5年,晉升架構
提交申請后,顧問老師會電話與您溝通安排學習