溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

java進(jìn)程和線程該怎么理解

發(fā)布時(shí)間:2022-01-12 15:44:58 來(lái)源:億速云 閱讀:138 作者:iii 欄目:大數(shù)據(jù)

這篇“java進(jìn)程和線程該怎么理解”文章的知識(shí)點(diǎn)大部分人都不太理解,所以小編給大家總結(jié)了以下內(nèi)容,內(nèi)容詳細(xì),步驟清晰,具有一定的借鑒價(jià)值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來(lái)看看這篇“java進(jìn)程和線程該怎么理解”文章吧。

一、進(jìn)程和線程的含義  


進(jìn)程:進(jìn)程是擁有資源的基本單位。

線程:線程是CPU調(diào)度的基本單位。


二、舉個(gè)例子


? 比如我們手機(jī)有兩個(gè)進(jìn)程要進(jìn)行,一個(gè)是便簽,另一個(gè)是絕地求生。


? 便簽進(jìn)程運(yùn)行要打開(kāi)保存文本的文件,這里的“打開(kāi)文件”我們就叫它資源;絕地求生進(jìn)程要通過(guò)監(jiān)聽(tīng)用戶按鍵事件,這里的“監(jiān)聽(tīng)用戶按鍵事件”叫做它的資源。


? 我們都知道便簽軟件有自動(dòng)保存的功能這個(gè)功能在t1線程中執(zhí)行,用戶編輯文本在t2線程中執(zhí)行;絕地求生假設(shè)也有兩個(gè)線程t3和t4,t3線程負(fù)責(zé)QE 歪頭,t4線程負(fù)責(zé)開(kāi)槍。上邊我所給出的概念是『線程是CPU調(diào)度的基本單位』CPU在調(diào)度的時(shí)的基本單位不是打開(kāi)便簽和絕地求生兩個(gè)進(jìn)程,而是t1、t2、t3、t4四個(gè)線程。


圖解:

java進(jìn)程和線程該怎么理解         


★ 注意:一個(gè)進(jìn)程至少要有一個(gè)線程


? 如果一個(gè)進(jìn)程沒(méi)有多線程,你玩絕地求生的時(shí)候怎么能邊歪頭邊射擊呢?單線程只能干一件事,事件不能并發(fā)進(jìn)行,浪費(fèi) CPU 資源。所謂的多進(jìn)程就是絕地求生運(yùn)行在后臺(tái)的同時(shí),你使用便簽進(jìn)行文字記錄。進(jìn)程是一個(gè)軟件在運(yùn)行,線程就是執(zhí)行進(jìn)程中的線程代碼片段。


三、線程池


概念:


 ① 有了多線程編程為何還要引進(jìn)線程池的概念呢?


線程池對(duì)于我們開(kāi)發(fā)者創(chuàng)建來(lái)說(shuō)很簡(jiǎn)單方便,但是對(duì)服務(wù)器來(lái)說(shuō)負(fù)擔(dān)很沉重,每個(gè)用戶請(qǐng)求登錄軟件都要開(kāi)啟一個(gè)線程,創(chuàng)建的線程就會(huì)很多,你想想那么多的線程去競(jìng)爭(zhēng) CUP 資源,持續(xù)切換,這個(gè) CUP 的調(diào)度不是要累死的節(jié)奏嗎?為了解決這個(gè)問(wèn)題,就引進(jìn)了線程池的概念,通過(guò)線程池提前創(chuàng)建一定數(shù)量的線程,不用等任務(wù)來(lái)了在創(chuàng)建,提前創(chuàng)建線程的作用就是當(dāng)系統(tǒng)有任務(wù)來(lái)了之后就直接去執(zhí)行任務(wù)。如果有任務(wù)來(lái)了,線程池的線程就會(huì)去執(zhí)行任務(wù),執(zhí)行完后不銷毀直接回到線程池等待執(zhí)行下一個(gè)任務(wù)。我們所說(shuō)的線程就是代碼的執(zhí)行,動(dòng)態(tài)創(chuàng)建的。


② 線程的創(chuàng)建是通過(guò) .start 開(kāi)啟的,一旦開(kāi)啟線程就會(huì)自動(dòng)執(zhí)行 run 方法。那么一個(gè)新的問(wèn)題來(lái)了,任務(wù)還沒(méi)來(lái)呢?提前創(chuàng)建一個(gè)線程之后直接執(zhí)行 run 方法了。


其實(shí)線程池還有重要的一點(diǎn),就是當(dāng)線程池剛創(chuàng)建時(shí),讓其進(jìn)入堵塞狀態(tài),等待系統(tǒng)任務(wù)的到來(lái);如果任務(wù)來(lái)了,我們就把第一位線程同學(xué)叫醒拿著老師的任務(wù)去干活。


③ 怎么讓線程池進(jìn)入堵塞狀態(tài)呢?


BlockingQueu 作為線程容器,可以為線程同步提供有力的保障。BlockingQueue 很容易理解,它就是一個(gè)容器,用來(lái)存放系統(tǒng)的任務(wù)的。線程池的線程調(diào)用它的 take() 方法取出任務(wù)進(jìn)行執(zhí)行,如果 BlockingQueue 沒(méi)有可執(zhí)行任務(wù),該線程就會(huì)阻塞;該線程可以通過(guò)調(diào)用 put 方法放入任務(wù),如果任務(wù)滿了線程也會(huì)阻塞。


圖解:

java進(jìn)程和線程該怎么理解      



就是說(shuō)在線程池中的每個(gè) Run 方法中都要有一個(gè)循環(huán)判斷  BlockingQueue 有沒(méi)有可執(zhí)行的任務(wù),如果有就去執(zhí)行,執(zhí)行完回來(lái)再 BlockingQueue 中繼續(xù)獲取任務(wù),如果 BlockingQueue 沒(méi)有可執(zhí)行任務(wù)了,線程就處于阻塞等待狀態(tài)。

以上就是關(guān)于“java進(jìn)程和線程該怎么理解”這篇文章的內(nèi)容,相信大家都有了一定的了解,希望小編分享的內(nèi)容對(duì)大家有幫助,若想了解更多相關(guān)的知識(shí)內(nèi)容,請(qǐng)關(guān)注億速云行業(yè)資訊頻道。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI