(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 方法中的執行的會比較晚,說明,在多執行緒中 ...