保證執行緒安全的思路

2021-10-08 02:35:22 字數 385 閱讀 5495

1、使用沒有資源共享的模型

2、有資源共享,但對共享資源只進行讀操作,不去改變資源

2.1不需要對共享資源進行寫操作

2.2使用不可變物件

3、直面執行緒安全:

3.1保證原子性

3.2保證**的順序性

3.3保證**的可見性

原子性: 比如a在乙個房間內做自己的事情,如果房間沒有上鎖,別的人進去房間會讓a出錯,這就是不具備原子性。

可見性: 為了提高效率,jvm執行過程中會將資料盡可能的存放在工作記憶體,而不是主記憶體,這樣一來就會導致共享變數不能被其他執行緒觀察到,從而導致最後的問題。

順序性: jvm會自動將一部分**進行重排序從而提高效率,如果是單執行緒情況下,這樣是沒問題的,但如果多執行緒,這樣就可能出現問題。

如何保證執行緒安全?

執行緒安全 一般說來,確保執行緒安全的方法有這幾個 競爭與原子操作 同步與鎖 可重入 過度優化。競爭與原子操作 多個執行緒同時訪問和修改乙個資料,可能造成很嚴重的後果。出現嚴重後果的原因是很多操作被作業系統編譯為彙編 之後不止一條指令,因此在執行的時候可能執行了一半就被排程系統打斷了而去執行別的 了...

保證類執行緒安全的措施

不共享執行緒間的變數 設定屬性變數為不可變變數 每個共享的可變變數都使用乙個確定的鎖保護 1.通過架構設計 通過上層的架構設計和業務分析來避免併發場景。比如需要用多執行緒或分布式集群統計一堆使用者的相關統計值,由於使用者的統計值是共享資料,因此需要保證執行緒安全。從業務上分析出使用者之間的資料並不共...

如何保證Java執行緒安全

不要跨執行緒訪問共享變數 使共享變數是final型別的 使共享變數唯讀 將共享變數的操作加上同步 對於volatile宣告的數值型別變數進行運算,往往是不安全的 volatile只能保證可見性,不能保證原子性 使用普通同步容器 vector,hashtable 的迭代器,需要外部鎖來保證其原子性。原...