無論在哪種編程語言中,多線程都是重中之重。所以說掌握多線程并發(fā)編程是一個優(yōu)秀的程序員所必須的一項技能。雖然平時都有封裝好的現(xiàn)成的可以使用,但是知識呢要吃到肚子才更安心。下面我們就通過一系列的博文,來系統(tǒng)的介紹下多線程。
首先我們還是得從進程、線程基礎知識開始介紹。
什么是進程?
① 進程是系統(tǒng)進行資源分配的最小單位,也是系統(tǒng)進行資源調(diào)度的基本執(zhí)行單元。
② 它是程序的一次執(zhí)行過程。簡單點的說“進程是正在運行的程序的實例”。
③ 每個進程運行在受保護的獨立的內(nèi)存空間內(nèi),進程和進程之間互不干擾。
什么是線程?
① 線程是CPU調(diào)度的最小單位,是進程中的一個實體。
② 每一個應用程序在啟動之后,都會默認開啟一條主線程,除了主線程,其他的線程都是子線程。
③ 一個線程可以創(chuàng)建和撤銷另一個線程。(線程的生命周期放在下一篇博文里面。)
進程、線程區(qū)別是什么?
① 進程和線程都是程序運行的基本單元,一個程序至少有一個進程,一個進程至少有一個線程。
② 線程的劃分尺度小于進程,使得多線程程序的并發(fā)性高。
③ 同一個進程中的多個線程之間可以并發(fā)執(zhí)行,線程共享內(nèi)存,從而極大地提高了程序的運行效率。
關于并發(fā)、并行的區(qū)別
并發(fā)
簡單的來說就是指一個時間段內(nèi),多個任務同時處于運行活躍狀態(tài),而不是在同一時刻運行多個任務。那問題來了,為什么我們感覺像是多個任務同時執(zhí)行的呢?這是因為每個線程都被分了一個時間段,叫做時間片。因為CPU處理速度很快,所以看上去就是多個任務在同時執(zhí)行,實際上就只有一個任務在執(zhí)行。
并行
并行相對來說能簡單些,指若干個程序段同時在系統(tǒng)中運行,這些程序的執(zhí)行在時間上是重疊的,一個程序段的執(zhí)行尚未結(jié)束,另一個程序段的執(zhí)行已經(jīng)開始,無論從微觀還是宏觀,程序都是一起執(zhí)行的。
舉個例子
在幼兒園呢有很多小寶寶對吧,現(xiàn)在有個小寶寶(程序或者線程)不開心,哭了。其他小寶寶受到這個小寶寶情緒感染,陸續(xù)開始哭,這時你(CPU)要快速把一個小玩具遞給一個正在哭的小寶寶,他有了小玩具就不哭了。理論上只要你夠快(CPU執(zhí)行速度),誰哭就把這個小玩具送給誰,就沒有小寶寶哭了,這就是并發(fā)。并行就是多了幾個幼師,每個幼師都送給各自寶寶一個玩具,每個寶寶現(xiàn)在都有玩具了,這就是并行。
寫完嘍!ㄟ(▔,▔)ㄏㄟ(▔,▔)ㄏㄟ(▔,▔)ㄏ
知識重在總結(jié)和梳理,只有不斷地去學習并運用,才能化為自己的東西。當你能為別人講明白的時候,說明自己已經(jīng)掌握了。
歡迎轉(zhuǎn)載,轉(zhuǎn)載請注明出處!
如果有錯誤的地方,或者有您的見解,還請不嗇賜教!
喜歡的話,麻煩點個贊!
Java中的多線程(三)關于多線程管理的相關函數(shù)說明
Java中的多線程(二)線程的創(chuàng)建及線程的生命周期