多執行緒 基礎知識

2021-08-15 18:33:35 字數 2047 閱讀 7643

1 建立執行緒

extends thread

implements runnable

啟動執行緒:threadl類的start()

執行緒完成:1、run()方法執行完成;2、丟擲乙個未處理的異常導致執行緒的提前結束

2 執行緒的狀態

新建立   執行緒被建立,但是沒有呼叫start方法

可執行(runnable)  執行狀態,由cpu決定是不是正在執行

被阻塞(blocking)  阻塞,執行緒被阻塞於鎖

等待/計時等待(waiting) 等待某些條件成熟

被終止  執行緒執行完畢

3 執行緒的常用方法

run()和start() 

run就是乙個普通的方法,跟其他類的例項方法沒有任何區別。

sleep()

不會釋放鎖,所以我們在用sleep時,要把sleep放在同步**塊的外面。

yield()

當前執行緒出讓cpu佔有權,當前執行緒變成了可執行狀態,下一時刻仍然可能被cpu選中,不會釋放鎖。

wait()和 notify()/notiyfall() 

呼叫以前,當前執行緒必須要持有鎖,呼叫了wait() notify()/notiyfall()會釋放鎖。

join() 結合 執行緒池可以保證

執行緒的順序執行

executorservice executor = executors.newsinglethreadexecutor();

4 執行緒間協作和通訊

synchronized關鍵字只能修飾**塊和方法,當修飾的是靜態方法時鎖住整個類。原子性和可見性。

volatile 關鍵字 只保證執行緒可見性,應用場景單例模式的雙重校驗鎖。適合讀多寫少的場景。

執行緒同步

等待通知機制

等待超時模式

5 併發容器和併發工具類

concurrenthashmap分段鎖實現多執行緒安全。

concurrentskiplistmap    treemap的併發實現

concurrentskiplistset     treeset的併發實現

skiplist跳表

concurrentlinkedqueue  無界非阻塞佇列

copyonwritearraylist和copyonwritearrayset 寫的時候進行複製,可以進行併發的讀。

arrayblockingqueue: 陣列結構組成有界阻塞佇列。

先進先出原則,初始化必須傳大小,take和put時候用的同一把鎖

linkedblockingqueue:鍊錶結構組成的有界阻塞佇列

先進先出原則,初始化可以不傳大小,put,take鎖分離

併發工具類

countdownlatch

cyclicbarrier

控制併發執行緒數的semaphore

exchanger

6 executor框架的結構

1.任務的產生:runnable介面和callable介面

這2個物件屬於任務物件。工具類executors可以把乙個runnable物件封裝為callable物件。當我們擁有任務物件之後,就可以將其交給executorservice(executor的乙個實現介面)了,這樣轉入第二部分–任務處理部分。

2.任務的處理:executor介面—>executorservice介面

任務的處理主要是將任務丟到執行緒池中,由執行緒池提供執行緒將任務「消費掉」。

執行緒池有2類:threadpoolexecutor和scheduledthreadpoolexecutor。2種執行緒池類均可以通過工廠類executors來建立。

3.任務結果的獲取:future介面 或者通過completionservice來儲存返回值(結果存在阻塞佇列中)

參考:參考:

多執行緒基礎知識

建立乙個序列佇列,該佇列中從方的都是要依次執行的任務,dispatch queue serial 表示序列佇列的標示 dispatch queue t serialqueue dispatch queue create serial dispatch queue serial 建立乙個並行佇列,並行...

c 基礎知識 多執行緒

執行緒被定義為程式的執行路徑。每個執行緒都定義了乙個獨特的控制流。如果您的應用程式涉及到複雜的和耗時的操作,那麼設定不同的執行緒執行路徑往往是有益的,每個執行緒執行特定的工作。執行緒是輕量級程序。乙個使用執行緒的常見例項是現代作業系統中並行程式設計的實現。使用執行緒節省了 cpu 週期的浪費,同時提...

Java多執行緒基礎知識

一 執行緒執行狀態 1.執行緒執行狀態圖 執行緒共包括以下5種狀態。1.新建狀態 new 執行緒物件被建立後,就進入了新建狀態。例如,thread thread new thread 2.就緒狀態 runnable 也被稱為 可執行狀態 執行緒物件被建立後,其它執行緒呼叫了該物件的start 方法,...