多執行緒實現的總結

2022-08-21 17:30:16 字數 2450 閱讀 8058

1、 volatile的實現原理

2、synchronized 實現原理

3、執行緒池的分析和使用

我們可以通過threadpoolexecutor來建立乙個執行緒池。

new  threadpoolexecutor(corepoolsize, maximumpoolsize, keepalivetime, milliseconds,runnabletaskqueue, handler);
建立乙個執行緒池需要輸入幾個引數:

corepoolsize(執行緒池的基本大小):當提交乙個任務到執行緒池時,執行緒池會建立乙個執行緒來執行任務,即使其他空閒的基本執行緒能夠執行新任務也會建立執行緒,等到需要執行的任務數大於執行緒池基本大小時就不再建立。如果呼叫了執行緒池的prestartallcorethreads方法,執行緒池會提前建立並啟動所有基本執行緒。

runnabletaskqueue(任務佇列):用於儲存等待執行的任務的阻塞佇列。 可以選擇以下幾個阻塞佇列。

arrayblockingqueue:是乙個基於陣列結構的有界阻塞佇列,此佇列按 fifo(先進先出)原則對元素進行排序。

linkedblockingqueue:乙個基於鍊錶結構的阻塞佇列,此佇列按fifo (先進先出) 排序元素,吞吐量通常要高於arrayblockingqueue。靜態工廠方法executors.newfixedthreadpool()使用了這個佇列。

synchronousqueue:乙個不儲存元素的阻塞佇列。每個插入操作必須等到另乙個執行緒呼叫移除操作,否則插入操作一直處於阻塞狀態,吞吐量通常要高於linkedblockingqueue,靜態工廠方法executors.newcachedthreadpool使用了這個佇列。

priorityblockingqueue:乙個具有優先順序的無限阻塞佇列。

maximumpoolsize(執行緒池最大大小):執行緒池允許建立的最大執行緒數。如果佇列滿了,並且已建立的執行緒數小於最大執行緒數,則執行緒池會再建立新的執行緒執行任務。值得注意的是如果使用了無界的任務佇列這個引數就沒什麼效果。

threadfactory:用於設定建立執行緒的工廠,可以通過執行緒工廠給每個建立出來的執行緒設定更有意義的名字。

rejectedexecutionhandler(飽和策略):當佇列和執行緒池都滿了,說明執行緒池處於飽和狀態,那麼必須採取一種策略處理提交的新任務。這個策略預設情況下是                     abortpolicy,表示無法處理新任務時丟擲異常。以下是jdk1.5提供的四種策略。

abortpolicy:直接丟擲異常。

discardoldestpolicy:丟棄佇列裡最近的乙個任務,並執行當前任務。

discardpolicy:不處理,丟棄掉。

當然也可以根據應用場景需要來實現rejectedexecutionhandler介面自定義策略。如記錄日誌或持久化不能處理的任務。

keepalivetime(執行緒活動保持時間):執行緒池的工作執行緒空閒後,保持存活的時間。所以如果任務很多,並且每個任務執行的時間比較短,可以調大這個時間,提高執行緒的利用率。

timeunit(執行緒活動保持時間的單位):可選的單位有days,hours,minutes,milliseconds,microseconds,nanoseconds

當提交乙個新任務到執行緒池時,執行緒池的處理流程如下:

1.   首先執行緒池判斷基本執行緒池是否已滿?沒滿,建立乙個工作執行緒來執行任務。滿了,則進入下個流程。

2.   其次執行緒池判斷工作佇列是否已滿?沒滿,則將新提交的任務儲存在工作佇列裡。滿了,則進入下個流程。

3.   最後執行緒池判斷整個執行緒池是否已滿?沒滿,則建立乙個新的工作執行緒來執行任務,滿了,則交給飽和策略來處理這個任務。

4、concurrenthashmap 原理

分段鎖5、atomic的實現原理

6、concurrentlinkedqueue的實現原理 

7、阻塞佇列

8、fork/join框架

9、copy-on-write容器

修改後自動複製

10、生產者消費者模式

11、synchronized 和 lock 區別

多執行緒的總結

今天學習了關於多執行緒的有關知識,主要涉及到幾個概念的理解,物件鎖 sleep wait notify notifyall。物件鎖 每個物件都有物件鎖,當某個執行緒進入用synchronized定義方法時,就獲得了當前類物件 方法所屬的類的物件 的鎖,其他執行緒就不能再獲得該鎖,直到執行緒釋放該鎖。...

多執行緒的總結

多執行緒 指的是這個程式 乙個程序 執行時產生了不止乙個執行緒 並行與併發 o 並行 多個cpu例項或者多台機器同時執行一段處理邏輯,是真正的同時。o 併發 通過cpu排程演算法,讓使用者看上去同時執行,實際上從cpu操作層面不是真正的同時。併發往往在場景中有公用的資源,那麼針對這個公用的資源往往產...

多執行緒總結

多執行緒的重要性和作用我就不做說明了。直接進入正題,整理下,整理了下網上的若干資源,寫得很好的 一 首先不用說是msdn 1.system.threading 命名空間 system.threading命名空間提供一些使得可以進行多執行緒程式設計的類和介面。除同步執行緒活動和訪問資料的類 mutex...