併發程式設計學習筆記

2021-08-22 12:56:33 字數 945 閱讀 6379

併發程式設計第2章,基礎篇

2.1執行緒安全

1併發程式設計即是要控制對共享的可變的變數的訪問操作順序

2保證同步的方法,在語法/**級別來說,可以使用synchronized,volatile,或者是現式的鎖,或者使用原子變數

3好的設計是避免執行緒危險的良方,使用oo的方法盡量避免執行緒的隱患。

4執行緒安全的program不一定是由執行緒安全的classes組成的

5什麼是執行緒安全,如何區分哪些是執行緒安全的哪些不是?

2.2原子性

1原子操作時執行緒安全的,對於check-the-act和read-modify-write來說,將這些操作封裝成原子操作則能保證執行緒安全。

2對於check-then-act來說,比如常見的單例模式,有很多就是check-then-act

3對於read-modify-write來說,典型的i++就是。是由三個原子操作組成

2.3鎖

如果有多個原子例項變數,那麼在程式執行過程中,對於這幾個原子變數的操作就變成非原子的操作了,比如

class a

}對於這個操作來說,儘管a,b都是原子變數但是由於method的操作,使a,b的狀態不能處於原子的變化,在修改a的時候,b有可能被讀取。但是b卻沒有被正確設定,因為b有可能是需要通過a運算得到的值。

對於這種情況,就需要使用鎖,將需要劃分成原子操作的部分**進行鎖定,成為新的原子操作,這部分**,只允許乙個執行緒同時訪問,其他執行緒如果需要執行,則均需要等待當前執行執行緒的解鎖。

sysnizatized是可重入鎖,是基於每執行緒的,同一執行緒獲得鎖之後,可重複進入

2.4通過鎖監視狀態

2.5效能

1只將需要同步的**同步,如果需要在一段**中劃分超過兩個以上的同步塊,那麼需要權衡一下是否需要劃分這麼多,是否可以將同步塊合併,因為獲取和釋放鎖也是需要開銷的

2避免對執行速度慢的**進行同步,比如計算密集型的,或者網路的等

Java併發學習筆記(1) 併發程式設計基礎

執行緒的狀態 new 初始狀態,執行緒被new 出來,但還沒start 的狀態 runnable 指的是呼叫了start 方法,但還在等著cpu資源的狀態 running 乙個執行緒獲得了cpu資源,正在走的狀態 terminated 執行緒物件的run 方法走完了的狀態 blocked 執行緒被阻...

爪哇學習筆記 併發程式設計3

atom 不可分割 syn基於阻塞的鎖的機制,1 被阻塞的執行緒優先順序很高,2 拿到鎖的執行緒一直不釋放鎖怎麼辦?3 大量的競爭,消耗cpu,同時帶來死鎖或者其他安全。cas的原理 cas compare and swap 指令級別保證這是乙個原子操作 迴圈 死迴圈,自旋 裡不斷的進行cas操作 ...

併發程式設計學習筆記(八 volitile)

jvm如何解決快取一致性問題 1 為何演進,如何演進。計算機在執行程式的時,每條指令都是在cpu中執行,在執行的過程中勢必會涉及到資料的讀寫。而程式執行的資料是儲存在主記憶體中的,也就是我們常說的記憶體,那麼此時就會有乙個問題 解決辦法 這樣cpu不必與執行速度較慢的主記憶體打交道,而是和執行速度快...