多執行緒的認識 三

2021-09-27 07:03:53 字數 1170 閱讀 7705

(1)概念:任務在cpu上執行都有一定的時間片,當任務的時間片結束時,該任務就會被掛起,執行下乙個任務,這個過程中任務狀態資訊的儲存和載入稱為上下文的切換。

(2)什麼是上下文:上下文是指記錄著執行緒狀態的cpu暫存器資訊和程式計數器的狀態資訊

cpu暫存器:cpu的高速的記憶體空間。

程式計數器:記錄執行緒的記憶體位址和執行到那一行的記憶體空間。

(3)pcb切換幀:上下文切換可以被認為是核心執行的執行緒切換的,上下文資訊是儲存在程式控制模組的。

(4)上下文切換的過程:

掛起:任務時間片到了或者其他原因放棄了cpu,任務會被掛起,執行緒的狀態資訊會被儲存在cpu裡面。

恢復:cpu會在根據cpu裡面的狀態資訊來恢復執行緒。

執行到位置:cpu會根據程式計數器來到執行的位置。

(5)執行緒發生上下文切換的原因:

1.任務時間片到了,讓出cpu

2.任務發生io阻塞,放棄cpu資源,被掛起

3.多個任務競爭鎖資源,該任務多不到鎖資源,被掛起

4.**裡面主動選擇掛起任務

5.硬體中斷

(1)執行緒池的原理:

執行緒池的主要工作是控制線程的數量,任務放在佇列裡面,交給執行緒來執行。如果執行緒的數量超過執行緒超過最大數量的等候排隊的時候,則需要等待執行緒執行完成後在執行。繼承重寫thread 類,在其 start 方法中新增不斷迴圈呼叫傳遞過來的 runnable 物件。 這就是執行緒池的實

現原理(2)執行緒池的組成部分:

1.執行緒池管理員:管理各個執行緒

2.執行緒:執行任務的

3.任務介面:任務需要實現的介面

4.任務佇列:任務排隊等待被執行的地方

(3)執行緒池的工作過程:

1.新建立乙個執行緒池,裡面沒有執行緒,當任務佇列作為引數進來的時候,也不會立刻建立執行緒來執行

2.呼叫execute() ,他會對執行緒進行判斷:

1.當前執行緒的數量小於maxpoolsize,則會建立乙個執行緒來執行這個任務。

2.當前執行緒的數量大於maxpoolsize,則會把這個任務放在任務佇列裡面。

3.當等待佇列滿了的時候,且當前的執行緒數量小於maximumpoolsize時,則會建立乙個非核心狀態的執行緒來執行這個任務。

4.當等待佇列滿了的時候,且當前的執行緒數量大於maximumpoolsize時,則會丟擲異常 rejectexecutionexception

多執行緒學習總結(一) 認識多執行緒

而唯一看到的多執行緒 也是再專案中看到了別人寫的多執行緒 那時想要寫乙個和多執行緒相關的 基本是一模一樣的仿照著寫,出了一點問題也搞不懂問題在 所以就一直迷迷糊糊了一段時間,後來感覺有必要把這塊搞懂,就自己慢慢的找資料學習了。廢話就講這麼多,其實要學習多執行緒相關的,首先要搞清楚乙個概念,什麼是執行...

Java多執行緒的初步認識

在談執行緒之前,我們至少應該了解下程序是什麼,簡單來說,程序就是正在執行的應用程式,每乙個正在執行的應用程式就會對應乙個程序。那麼執行緒,就是依賴於程序而存在的,乙個程序可以開啟多個執行緒,由乙個物件所開啟的所有執行緒使用的是同乙份成員屬性。多執行緒的兩種方案 繼承thread類 實現runable...

Java多執行緒 多執行緒的初步認識理解以及入門使用

如下 繼承thread類 package com.demo public class threaddemo1 extends thread override public void run 實現runnable介面 當我們進行執行後就會發現,有時候run 方法中的執行的會比較晚,說明,在多執行緒中 ...