1. 程式人生 > 實用技巧 >多執行緒入門

多執行緒入門

1. 理解執行緒與程序

由於併發肯定涉及到多執行緒,因此在進入併發程式設計主題之前,我們先來了解一下程序和執行緒的由來,這對後面對併發程式設計的理解將會有很大的幫助。

程序和執行緒的對比這一知識點由於過於基礎,正因為過於基礎,所以我們更應該透徹它!我們必須掌握什麼是執行緒和程序,掌握執行緒與程序的關係、區別及優缺點 !

1.1、何為程序?

首先我們來看一下程序的概念:

程序:是指一個記憶體中執行的應用程式,每個程序都有一個獨立的記憶體空間,一個應用程式可以同時執行多個程序;程序也是程式的一次執行過程,是系統執行程式的基本單位;系統執行一個程式即是一個程序從建立、執行到消亡的過程。

看完之後,是不是感覺很抽象?很懵bi?懵bi就對了,說明你和我智商一樣高…開個玩笑

不妨先憋棄上面的概念,放鬆一下大腦,雙擊開啟LOL,秒選德馬打野,輸了直接退出遊戲並且保持微笑,然後正襟危坐心平氣和的看宜春寫的部落格…

這個時候的你不僅僅是愉快的擼了一把遊戲,而且還親自體驗擼了一把程序…其實在你雙擊開啟LOL的時候就已經建立了程序,此話怎講?眾所周知,我們的電腦安裝的軟體比如:LOL、微信、谷歌等等都是儲存在我們的硬碟上的,硬碟上的資料可以說是永久儲存(ORM),當我們雙擊LOL的時候,LOL程式執行就進入了記憶體中,所有的程式必須進入記憶體中才能執行,記憶體屬於臨時儲存(RAM),而進入記憶體的程式都可以叫做是程序,把LOL程式退出的時候,LOL程式就會退出記憶體,程序也就隨之銷燬了!因此說各位擼了一把程序也不為過吧。

啥?字太多了,看的不夠明瞭,不如看圖得勁…額。。。

上面主要是通過抽象的描述了程序,其實程序是可以很直觀的看的到的,我們可以再電腦底部工作列,右鍵----->開啟工作管理員,可以檢視當前任務的程序:

其實,關於執行緒博主我完全可以一兩句話概括,但是這樣並不負責,畢竟這篇文章標題就是要讓你徹底入門java多執行緒。如果連程序都理解不好談何徹底理解多執行緒?

1.2、何為執行緒?

同樣的,我們先來看執行緒的概念

執行緒是程序中的一個執行單位,負責當前程序中程式的執行。一個程序中至少有一個執行緒,也就是說一個程序可以有多個執行緒的,而多個執行緒的程序運用程式就叫做多執行緒程式

執行緒的概念稍微好理解很多,但是想更深層次的去理解光靠上面一段文字的概述是完全不夠的!

這不打LOL的過程中,屬實卡的一批,果然花高價998買的6手戴爾筆記本打LOL屬實像極了愛情。這個時候不得不雙擊開啟電腦安全管家進行防毒,果然2500天沒有進行過病毒查殺,我天。。。其實我相信很多人都用過電腦管家或者手機管家之類的安全軟體,我們都很清楚我們開啟病毒查殺之後一般要幾分鐘掃描查殺,這個時候我們是可以讓它後臺進行的,我們不會等而是開啟另一個垃圾清理的功能,這個時候我們也不會等而是再去啟動電腦加速功能。等到 這些操作都完成之後果斷退出電腦管家,繼續LOL,果然高價998買的6手戴爾筆記本再怎麼防毒打LOL還是照樣的卡…

其實清楚執行緒必然涉及到CPU的相關概念了,將上面文字所描述的用圖片概括,大致為:

1.3、何為多執行緒?

從上一節中,我們也提到過多執行緒,所以理解起來應該不難。

多執行緒就是多個執行緒同時執行或交替執行。

單核CPU:交替執行。
多核CPU:同時執行。

其實,多執行緒程式並不能提高程式的執行速度,但能夠提高程式執行效率,讓CPU的使用率更高。

1.4、何為執行緒排程優先順序?

說起執行緒排程優先順序這個概念,就讓我想到現在我們大部分人投簡歷一樣。如果你的學歷或者工作經驗越高,那麼你的優先順序就越高,面試官很大機率就會讓你去面試但也不是一定只是機率特別大,如果執行緒的優先順序相同,那麼會隨機選擇一個(執行緒隨機性)!在我們每個人的電腦中執行緒是可以設定執行緒的優先順序的,但是生活中沒有優先順序(學歷、工作經驗)的孩子就只能靠自己的能力了媽耶,太真實了…

執行緒優先順序具有繼承特性比如A執行緒啟動B執行緒,則B執行緒的優先順序和A是一樣的。

執行緒優先順序具有隨機性也就是說執行緒優先順序高的不一定每一次都先執行完,只是被執行的可能性更大。

在今後的多執行緒學習旅遊中我們會使用到getPriority()方法獲取執行緒的優先順序。

1.5、為什麼提倡使用多執行緒而不是多程序?

執行緒與程序相似,但執行緒是一個比程序更小的執行單位,是程式執行的最小單位。一個程序在其執行的過程中可以產生多個執行緒。與程序不同的是同類的多個執行緒共享同一塊記憶體空間和一組系統資源,所以系統在產生一個執行緒,或是在各個執行緒之間作切換工作時,負擔要比程序小得多,也正因為如此,執行緒也被稱為輕量級程序。同時執行緒是程式執行的最小單位。使用多執行緒而不是用多程序去進行併發程式的設計,是因為執行緒間的切換和排程的成本遠遠小於程序。

而使用多執行緒,多執行緒會將程式執行方式從序列執行變為併發執行,效率會有很大提高。

2、理解並行和併發

在博主認為併發和並行是兩個非常容易被混淆的概念。為了防止繞暈大家,所以我選擇長話短說!

  1. 併發:一個時間段內同時發生(並不是同時發生)。
  2. 並行:同一時刻發生(真正的同時發生)。

它們都可以表示兩個或者多個任務一起執行,但是偏重點有些不同。

於此同時,我們不妨回顧一下上面所提到過的CPU,並再次理解併發與並行的區別,從而溫故知新我TM簡直是個天才!

單核CPU:交替執行【併發】
多核CPU:同時執行【並行】

併發給人的感覺是同時執行,那是因為分時交替執行的時間是非常短的!