Java-Thread00之多執行緒知識準備

  • 2019 年 10 月 12 日
  • 筆記

—— ![](https://img2018.cnblogs.com/blog/1822322/201910/1822322-20191012170014292-1661101986.jpg) —— ## 我 **QQ:1755497577(備註:部落格)** **B站:code_ant(java相關培訓影片)** ![微信搜索公眾號:CodeAnt](https://img2018.cnblogs.com/blog/1822322/201910/1822322-20191012170015682-1374397070.png) —— ## 簡述 之前對多執行緒一直有排斥心理,每一次學一點點就放棄了,最近狠下心來從新學習,順便做一個筆記,供大家參考一下。 demo:https://github.com/LiJinHongPassion/ThreadTest ## 後期學習目錄 thread01:[創建執行緒](https://lijinhongpassion.github.io/codeant/dxc01.html) thread02:[執行緒安全(同步問題)](https://lijinhongpassion.github.io/codeant/dxc02.html) thread03:[執行緒狀態](https://lijinhongpassion.github.io/codeant/dxc03.html) thread04:[四種執行緒池](https://lijinhongpassion.github.io/codeant/dxc04.html) thread05:[自定義執行緒池](https://lijinhongpassion.github.io/codeant/dxc05.html) ## 提前了解 #### 1 並發與並行 * **並發**:指兩個或多個事件在**同一個時間段內**發生。 * **並行**:指兩個或多個事件在**同一時刻**發生(同時發生)。 ![](https://img2018.cnblogs.com/blog/1822322/201910/1822322-20191012170026765-1361195331.bmp) 在作業系統中,安裝了多個程式,**並發**指的是在一段時間內宏觀上有多個程式同時運行,這在單 CPU 系統中,每一時刻只能有一道程式執行,即微觀上這些程式是分時的交替運行,只不過是給人的感覺是同時運行,那是因為分時交替運行的時間是非常短的。 而在多個 CPU 系統中,則**這些可以並發執行的程式便可以分配到多個處理器上(CPU),實現多任務並行執行**,即利用每個處理器來處理一個可以並發執行的程式,這樣多個程式便可以同時執行。目前電腦市場上說的多核 CPU,便是多核處理器,核 越多,並行處理的程式越多,能大大的提高電腦運行的效率。 > 注意:單核處理器的電腦肯定是不能並行的處理多個任務的,只能是多個任務在單個CPU上並發運行。同理,執行緒也是一樣的,從宏觀角度上理解執行緒是並行運行的,但是從微觀角度上分析卻是串列運行的,即一個執行緒一個執行緒的去運行,當系統只有一個CPU時,執行緒會以某種順序執行多個執行緒,我們把這種情況稱之為執行緒調度。 #### 2 執行緒與進程 * **進程**:是指一個記憶體中運行的應用程式,每個進程都有一個獨立的記憶體空間,一個應用程式可以同時運行多個進程;進程也是程式的一次執行過程,是系統運行程式的基本單位;系統運行一個程式即是一個進程從創建、運行到消亡的過程。 * **執行緒**:執行緒是進程中的一個執行單元,負責當前進程中程式的執行,一個進程中至少有一個執行緒。一個進程中是可以有多個執行緒的,這個應用程式也可以稱之為多執行緒程式。 簡而言之:一個程式運行後至少有一個進程,一個進程中可以包含多個執行緒 我們可以再電腦底部任務欄,右鍵—–>打開任務管理器,可以查看當前任務的進程: **進程** ![](https://img2018.cnblogs.com/blog/1822322/201910/1822322-20191012170028991-194361678.png) **執行緒** ![](https://img2018.cnblogs.com/blog/1822322/201910/1822322-20191012170032583-2140356886.png) **執行緒調度:** – 分時調度 所有執行緒輪流使用 CPU 的使用權,平均分配每個執行緒佔用 CPU 的時間。 – 搶佔式調度 優先讓優先順序高的執行緒使用 CPU,如果執行緒的優先順序相同,那麼會隨機選擇一個(執行緒隨機性),Java使用的為搶佔式調度。 – 設置執行緒的優先順序 ![設置執行緒優先順序](https://img2018.cnblogs.com/blog/1822322/201910/1822322-20191012170051063-1299014930.bmp) – 搶佔式調度詳解 大部分作業系統都支援多進程並發運行,現在的作業系統幾乎都支援同時運行多個程式。比如:現在我們上課一邊使用編輯器,一邊使用錄屏軟體,同時還開著畫圖板,dos窗口等軟體。此時,這些程式是在同時運行,」感覺這些軟體好像在同一時刻運行著「。 實際上,CPU(中央處理器)使用搶佔式調度模式在多個執行緒間進行著高速的切換。對於CPU的一個核而言,某個時刻,只能執行一個執行緒,而 CPU的在多個執行緒間切換速度相對我們的感覺要快,看上去就是在同一時刻運行。 其實,多執行緒程式並不能提高程式的運行速度,但能夠提高程式運行效率,讓CPU的使用率更高。 ![搶佔式調度](https://img2018.cnblogs.com/blog/1822322/201910/1822322-20191012170104743-1511647886.bmp) #### 3 同步和非同步 ![搶佔式調度](https://img2018.cnblogs.com/blog/1822322/201910/1822322-20191012170105628-26410558.png) #### 4 同步鎖和死鎖 **同步鎖** 當多個執行緒同時訪問同一個數據時,很容易出現問題。為了避免這種情況出現,我們要保證執行緒同步互斥,就是指並發執行的多個執行緒,在同一時間內只允許一個執行緒訪問共享數據。 Java 中可以使用 synchronized 關鍵字來取得一個對象的同步鎖。 **死鎖** 何為死鎖,就是多個執行緒同時被阻塞,它們中的一個或者全部都在等待某個資源被釋放。 ## 參考資料 學習文檔面試4 JAVA.pdf中的多執行緒部分 學習文檔多執行緒黑馬程式設計師-異常 + 多執行緒基礎中的多執行緒部分 > 本文由部落格一文多發平台 [OpenWrite](https://openwrite.cn) 發布!