執行緒安全的本質

2021-08-20 11:40:26 字數 427 閱讀 4537

執行緒安全的標準,對多執行緒的共享資源進行了合理的訪問控制。訪問控制的關鍵點:原子性、可見性、有序性。

原子性:a++操作可進行分解不具備原子性,會導致執行緒安全問題,可使用syncronized保證操作的原子性。

可見性:多執行緒任務中存在主記憶體與工作記憶體,主記憶體是唯一的所有執行緒共用,每個執行緒具有單獨的工作記憶體。存在主記憶體與工作記憶體同步的問題,使用syncronized、volatile關鍵字可以保證同步的原子性。在物件中使用volatile定義是否停止字段,可以立即控制所有執行緒的啟停。但是volatile無法保證操作的原子性,對於a++操作無法保證執行緒安全性。

有序性:**的執行順序可能與書寫順序不同,比如書寫時第一行載入配置,第二行賦值載入狀態為true,執行時可能先執行第2行,在多執行緒狀態下可能導致其它執行緒獲取配置資訊報錯。可以使用syncronized、volatile關鍵字進行控制。

執行緒安全與非執行緒安全的區別

執行緒安全 是多執行緒訪問時,採用加鎖機制,當乙個執行緒訪問該類的某個資料時,進行保護,其他執行緒不能進行訪問直到該執行緒讀取完,其他執行緒才可使用。不會出現資料不一致或者資料汙染。非執行緒安全 是多執行緒訪問時,不提供資料訪問保護,有可能出現多個執行緒先後更改資料造成所得到的資料是髒資料。所得資料...

執行緒安全(常用的執行緒安全類)

string中的stringbuffer list集合中的vector copyonwritearraylist reentrantlock lock鎖 是執行緒安全的arraylist vector是增刪改查方法都加了synchronized,保證同步,但是每個方法執行的時候都要去獲得鎖,效能就會...

PHP執行緒安全與非執行緒安全的區別

原文 windows版的php從版本5.2.1開始有thread safe 執行緒安全 和none thread safe nts,非執行緒安全 之分,這兩者不同在於何處?到底應該用哪種?這裡做乙個簡單的介紹。因此,如果是使用isapi的方式來執行php就必須用thread safe 執行緒安全 的...