多執行緒高併發

2021-10-21 17:22:04 字數 1848 閱讀 6682

個人總結,帶有個人主觀,請選擇性**。

1,實現 **runable**  

2,使用 **thread**

3,執行緒池建立 **executorse**.newcachedthreadpool()

其實哪有那麼多建立方式,本質上都是實現了runable 介面。

只列出大部分使用的方法,並未代表所有執行緒方法,後續會新增實際的例子,以供參考。
睡眠   :  當前執行緒暫停一段時間,讓給別的執行緒
讓出一下:返回就緒狀態,進入等待佇列
保證執行緒順序  : 在自己執行緒內呼叫,等待別人結束,然後在接著執行
給執行緒設定中斷標誌:作用於當前執行緒
檢測中斷並清除中斷狀態:作用於當前執行緒
只檢測中斷:作用於此執行緒

是同步鎖,用來實現互斥同步。
(1)修飾例項方法
public

synchronized

void

increase()

(2) 修飾靜態方法
public

static

synchronized

void

increase()

(3) 修飾**塊
byte

i =newbyte[1

];synchronized

(i)

鎖的是物件(物件頭64位的前兩位),不是**。
this  xx.

class

資源不能同時使用。
同乙個載入器是,不同載入器無法相互訪問,所以只要能訪問就是單利的。
同乙個加鎖執行緒自己呼叫自己不會發生死鎖情況;

防止死鎖。

通過為每個鎖關聯乙個請求計數和乙個占有它的執行緒。當計數為 0 時,認為鎖是未被占有的。

執行緒請求乙個未被占有的鎖時,jvm 將記錄鎖的佔有者,並且將請求計數器置為 1 。

如果同乙個執行緒再次請求這個鎖,計數將遞增;每次占用執行緒退出同步塊,計數器值將遞減。

直到計數器為0,鎖被釋放。

互斥同步最主要的問題就是進行執行緒阻塞和喚醒所帶來的效能問題,因此這種同步也被稱為阻塞同步。

而且加鎖方式屬於悲觀鎖(不管操作是否成功都加鎖)。

4,與同類的區別
synchronized 和 reentrantlock 都是可重入鎖。

reentrantlock 表現為 api 層面的互斥鎖(lock() 和 unlock() 方法配合 try/finally 語句塊來完成),synchronized 表現為原生語法層面的互斥鎖。

名稱

執行緒量執行時間

自旋鎖線程少

執行時間短

os系統鎖

執行緒多執行時間短

如果執行緒爭用,公升級為自旋鎖。
10次以後,公升級為重量級鎖。

多執行緒高併發

修飾靜態方法鎖的是class,非靜態鎖方法鎖的是this,只有拿到這個物件才可以繼續執行 synchronized是可重入鎖 執行緒1的方法1呼叫執行緒2的方法2,判斷是同一把鎖,在同乙個執行緒,可以呼叫。synchronized的鎖公升級 hotsport 鎖公升級過程 保證執行緒可見性 mesi...

高併發和多執行緒

高併發和多執行緒 總是被一起提起,給人感覺兩者好像相等,實則高併發 多執行緒 多執行緒是完成任務的一種方法,高併發是系統執行的一種狀態,通過多執行緒有助於系統承受高併發狀態的實現。高併發是一種系統執行過程中遇到的一種 短時間內遇到大量操作請求 的情況,主要發生在web系統集中大量訪問或者socket...

多執行緒與高併發

blocked 鎖池 timed waiting 定時等待 waiting 等待 terminated 禁止指令重排序 記憶體屏障 在單例雙重檢查中,不加會出現使用半初始化的值,也就是還未附初始值,指令重排導致的 類載入與指令重排的知識 public class spinlock while fla...