您好,登錄后才能下訂單哦!
這篇“java進程和線程該怎么理解”文章的知識點大部分人都不太理解,所以小編給大家總結了以下內容,內容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“java進程和線程該怎么理解”文章吧。
一、進程和線程的含義
進程:進程是擁有資源的基本單位。
線程:線程是CPU調度的基本單位。
二、舉個例子
? 比如我們手機有兩個進程要進行,一個是便簽,另一個是絕地求生。
? 便簽進程運行要打開保存文本的文件,這里的“打開文件”我們就叫它資源;絕地求生進程要通過監聽用戶按鍵事件,這里的“監聽用戶按鍵事件”叫做它的資源。
? 我們都知道便簽軟件有自動保存的功能這個功能在t1線程中執行,用戶編輯文本在t2線程中執行;絕地求生假設也有兩個線程t3和t4,t3線程負責QE 歪頭,t4線程負責開槍。上邊我所給出的概念是『線程是CPU調度的基本單位』CPU在調度的時的基本單位不是打開便簽和絕地求生兩個進程,而是t1、t2、t3、t4四個線程。
圖解:
★ 注意:一個進程至少要有一個線程
? 如果一個進程沒有多線程,你玩絕地求生的時候怎么能邊歪頭邊射擊呢?單線程只能干一件事,事件不能并發進行,浪費 CPU 資源。所謂的多進程就是絕地求生運行在后臺的同時,你使用便簽進行文字記錄。進程是一個軟件在運行,線程就是執行進程中的線程代碼片段。
三、線程池
概念:
① 有了多線程編程為何還要引進線程池的概念呢?
線程池對于我們開發者創建來說很簡單方便,但是對服務器來說負擔很沉重,每個用戶請求登錄軟件都要開啟一個線程,創建的線程就會很多,你想想那么多的線程去競爭 CUP 資源,持續切換,這個 CUP 的調度不是要累死的節奏嗎?為了解決這個問題,就引進了線程池的概念,通過線程池提前創建一定數量的線程,不用等任務來了在創建,提前創建線程的作用就是當系統有任務來了之后就直接去執行任務。如果有任務來了,線程池的線程就會去執行任務,執行完后不銷毀直接回到線程池等待執行下一個任務。我們所說的線程就是代碼的執行,動態創建的。
② 線程的創建是通過 .start 開啟的,一旦開啟線程就會自動執行 run 方法。那么一個新的問題來了,任務還沒來呢?提前創建一個線程之后直接執行 run 方法了。
其實線程池還有重要的一點,就是當線程池剛創建時,讓其進入堵塞狀態,等待系統任務的到來;如果任務來了,我們就把第一位線程同學叫醒拿著老師的任務去干活。
③ 怎么讓線程池進入堵塞狀態呢?
BlockingQueu 作為線程容器,可以為線程同步提供有力的保障。BlockingQueue 很容易理解,它就是一個容器,用來存放系統的任務的。線程池的線程調用它的 take() 方法取出任務進行執行,如果 BlockingQueue 沒有可執行任務,該線程就會阻塞;該線程可以通過調用 put 方法放入任務,如果任務滿了線程也會阻塞。
圖解:
就是說在線程池中的每個 Run 方法中都要有一個循環判斷 BlockingQueue 有沒有可執行的任務,如果有就去執行,執行完回來再 BlockingQueue 中繼續獲取任務,如果 BlockingQueue 沒有可執行任務了,線程就處于阻塞等待狀態。
以上就是關于“java進程和線程該怎么理解”這篇文章的內容,相信大家都有了一定的了解,希望小編分享的內容對大家有幫助,若想了解更多相關的知識內容,請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。