鎖的分類:
自旋鎖: 當訪問共享資源的時間比較短,如 ++,等簡單操作. 頻繁切換上下文消耗系統資源是不值得的.
jvm的實現是,當執行緒沒有獲得鎖的時候,執行緒不被掛起,而是執行少量的空迴圈.
迴圈幾次後,還沒有獲得鎖,則被掛起.
阻塞鎖:
重入鎖: synchronized 也屬於可重入鎖.
讀寫鎖:
互斥鎖:
悲觀鎖:
樂觀鎖:
公平鎖:
非公平鎖:
偏向鎖: 等到競爭出現才釋放鎖. 不然一直持有.
獨佔鎖:
共享鎖: 讀鎖就屬於共享鎖.
鎖降級: 寫執行緒獲取寫入鎖後可以獲取讀取鎖,然後釋放寫入鎖,這樣就從寫入鎖變成了讀取鎖,從而實現鎖降級的特性.
reentrantlock: 通過是否持有鎖的標識 和 可重入次數, 來判定是否持有鎖和是否可重入.
原始碼探秘之aqs 如何用單一 int 值標識讀寫兩種狀態:
原文注釋:
abstract static class sync extends abstractqueuedsynchronizer
獲取讀鎖: 無狀態右移 16 位,
這樣操作的都是 高16位.
/** returns the number of exclusive holds represented in count */
static int exclusivecount(int c)
獲取寫鎖: 先左移16位 減1(即65535,低八位全是1,高八位用0補全),這樣做&運算,
這樣不會改變讀鎖,也能獲取寫鎖.
jdk 8 stampedlock 原理及使用.
產生的原因: 一般應用都是讀多寫少, reentrantreadwritelock 因為讀寫互斥,
故讀時阻礙寫鎖,因而效能上不去.可能會造成寫執行緒飢餓.
特點:所有獲取鎖的方法,都返回乙個郵戳(stamp),stamp為0,表示獲取失敗,其餘都表示成功.
所有釋放鎖的方法,都需要乙個郵戳(stamp),這個stamp必須是和成功獲取鎖時得到的stamp一致.
stampedlock是不可重入的;(如果乙個執行緒已經持有了寫鎖,再去獲取寫鎖的話,就會造成死鎖.)
支援鎖公升級和鎖降級.
可以樂觀讀和悲觀讀. 樂觀讀不阻礙寫操作,悲觀讀阻礙寫操作.
使用有限次自旋,增加鎖獲得的機率,避免上下文切換帶來的開銷.
優點:相比reentrantreadwritelock,吞吐量大幅提公升.
原理:每次獲取鎖的時候都會返回乙個郵戳. 相當於資料庫樂觀鎖的version.
釋放鎖的時候,再根據之前獲得的郵戳,去進行鎖釋放.
執行緒間的通訊:
wait notify notifyall
wait會釋放持有的鎖,而sleep不會,sleep只是讓執行緒在指定的時間內,不去搶占cpu資源.
原子類:
doubleaccumulator , longaccumulator 支援自定義運算.
原子的更新屬性
原子的更新類裡的某個字段值.
atomicintegerfieldupdater atomiclongfieldupdater atomicreferencefieldupdater atomicstampedreference
容器:同步容器和併發容器
同步容器:
兩個非常古老的同步容器: vector, hashtable jdk 1.0
collections.synchronized*** jdk 1.2提供 ,本質是對相對應的容器進行包裝.
併發容器:
copyonwrite, concurrent, blockingqueue
concurrentblockingqueue: 隊列為空時阻塞.
concurrentlinkedqueue: 隊列為空時,返回空.
copyonwritearraylist iterator迭代時,是呼叫的內部類迭代器,不支援romve,add這些方法.
---------自己的筆記, 存檔下來,利於後期複習回顧.----------------
CSAPP讀書日記 第十二章 併發程式設計
構造併發程式的方法 構造併發程式最簡單的方法就是用程序,使用像fork exec和waitpid之類的函式。特點 父子程序之間共享檔案表,但是不共享使用者位址空間。優點 乙個程序不會覆蓋另乙個程序的虛擬記憶體。缺點 程序共享狀態資訊變得困難,必須使用顯式的ipc 程序間通訊 機制。結果就是這種設計方...
併發程式設計學習 併發程式設計的挑戰
死鎖 資源限制的挑戰 併發程式設計的目的是為了讓程式執行的更快,但是並不是啟動更多的執行緒,就能讓程式最大限度的併發執行。在進行併發程式設計時,如果希望通過多執行緒執行任務讓程式執行的更快,會面臨非常多的挑戰,比如上下文切換的問題,死鎖的問題,以及受限於硬體和軟體的資源限制問題 即使是單核處理器也支...
網路程式設計 併發程式設計
01 網路程式設計 軟體開發架構 osi七層協議 乙太網協議 ip 埠 tcp udp 02 tcp的三次握手四次揮手理解及面試題 03 socket套接字使用 tcp連線通訊迴圈 tcp粘包問題 struct模組 tcp傳送檔案 04 udp協議 tcp udp基於socketserver的併發 ...