併發程式設計總結

2021-08-01 06:03:25 字數 1051 閱讀 5812

一、併發基礎

1、用synchronized來修飾乙個方法,如同給乙個方法上了一把鎖,當多個執行緒同時訪問這個方法,每個執行緒都要先拿到這個鎖才能執行這個方法,執行完方法之後釋放鎖,其他的執行緒繼續「競爭鎖」來搶鎖,搶到之後執行再釋放,迴圈結束。

2、多個執行緒多個鎖,乙個物件有一把鎖,如果想用多個物件共享一把鎖,用static修飾synchronized方法和變數,那麼這個方法就是類級別的鎖,無論多少個物件,獲得的都是同一把類鎖,而不是原來獲取的物件鎖。

3、如果同乙個物件裡面的方法有同步方法和非同步方法,非同步方法不需要獲得鎖直接執行,同步方法依然需要去競爭鎖。

4、髒讀:髒讀意味著乙個事務讀取了另乙個事務未提交的資料,而這個資料是有可能回滾的;

5、synchronized 鎖重入,同步方法中呼叫同步方法,子類的同步方法繼承父類的同步方法使用。

6、如果在同步方法的執行過程中碰到異常,會立馬釋放鎖,讓其他執行緒進入方法

7、物件加鎖之後,如果物件發生改變,物件的鎖就會釋放。物件的屬性發生改變是不影響物件鎖。

8、字元常量加鎖,需要new乙個新的字元物件,因為字串在記憶體中是指向同乙個常量

10、如果想要volatile關鍵字修飾的變數具有原子性,可以使用原子類(atomicinteger、atomicboolean...等等.)來替代volatile,volatile只具備多個執行緒可見的特性,算是乙個輕量級的synchronized,不具有原子性。

11、atomic只能保證本身方法的原子性,不能保證多個執行緒之間的原子性,想要保證多個執行緒之間的原子性,只能在外部加一把鎖。

二、執行緒之間通訊

12、使用wait,notify方法來實現執行緒之間的通訊,這個兩個方法是object的方法,必須配合sychronized方法使用,wait方法是釋放鎖,notify方法是不釋放鎖。

13,、可以使用countdownlatch來實現執行緒之間的通訊,countdownlatch相當於wait和notify的公升級版,不需要搭配sychronized使用,countdownlatch.countdown();釋放鎖,countdownlatch.await();發起等待,把執行緒的控制權交給其他執行緒。

Java併發程式設計實戰 總結

1.可變狀態是至關重要的。所有的併發問題都可以歸結為如何協調對併發狀態的訪問,可變狀態越少,就越容易確保執行緒安全性。2.盡量將域宣告為final型別,除非需要它們是可變的。3.不可變物件一定是執行緒安全的。不可變物件能極大地降低併發程式設計的複雜性。它們更為簡單而且安全,可以任意共享而無須使用加鎖...

併發程式設計的知識總結

對併發領程式設計從全面的去看待,可以抽象成三個核心問題 分工 同步 互斥 分工 分工重要且複雜 同步 乙個執行緒完成任務後,如何通知執行後續任務的執行緒 互斥 同一時刻,只允許乙個執行緒訪問共享變數 併發程式設計有三大問題 可見性 原子性 有序性 可見性產生的原因 計算機記憶體和cup的速度相差很多...

併發程式設計和MySQL總結

1 併發程式設計主要內容 作業系統工作原理介紹 執行緒 程序演化史 特點 區別 互斥鎖 訊號 事件 join gil 程序間通訊 管道 佇列。生產者消費者模型 非同步模型 io多路復用模型 select poll epoll 高效能io模型原始碼例項解析 高併發ftp server開發 一 問答題 ...