Java執行緒安全和非執行緒安全

2021-06-30 16:27:13 字數 821 閱讀 4622

arraylist是非執行緒安全的,vector是執行緒安全的;

hashmap是非執行緒安全的,hashtable是執行緒安全的;

stringbuilder是非執行緒安全的,stringbuffer是執行緒安全的

什麼是執行緒安全?執行緒安全和非執行緒安全有什麼區別?分別在什麼情況下使用?

非執行緒安全是指多執行緒操作同乙個物件可能會出現問題

而執行緒安全則是多執行緒操作同乙個物件不會有問題。

執行緒安全必須要使用很多synchronized關鍵字(可以防止多個執行緒同時訪問物件中的方法或者某資源)來同步控制,所以必然會導致效能的降低。

所以在使用的時候,如果是多個執行緒操作同乙個物件,那麼使用執行緒安全的vector;否則,就使用效率更高的arraylist。

非執行緒安全!=不安全

有人在使用過程中有乙個不正確的觀點:我的程式是多執行緒的,不能使用arraylist要使用vector,這樣才安全。

非執行緒安全並不是多執行緒環境下就不能使用。注意我上面有說到:多執行緒操作同乙個物件。注意是同乙個物件。比如最上面那個模擬,就是在主線程中new的乙個arraylist然後多個執行緒操作同乙個arraylist物件。

如果是每個執行緒中new乙個arraylist,而這個arraylist只在這乙個執行緒中使用,那麼肯定是沒問題的。

執行緒安全的實現

執行緒安全是通過執行緒同步控制來實現的,也就是synchronized關鍵字。

這裡實現了乙個執行緒安全的計數器counter

public synchronized void addcount()}

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

windows版的php從版本5.2.1開始有thread safe。這兩者不同在於何處?到底應該用哪種?這裡做乙個簡單的介紹。從2000年10月20日發布的第乙個windows版的php3.0.17開始的都是執行緒安全的版本,這是由於與linux unix系統是採用 多程序的工作方式不同的是win...

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

windows版的php從版本5.2.1開始有thread safe。這兩者不同在於何處?到底應該用哪種?這裡做乙個簡單的介紹。從2000年10月20日發布的第乙個windows版的php3.0.17開始的都是執行緒安全的版本,這是由於與linux unix系統是採用 多程序的工作方式不同的是win...

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

windows版的php從版本5.2.1開始有thread safe。這兩者不同在於何處?到底應該用哪種?這裡做乙個簡單的介紹。從2000年10月20日發布的第乙個windows版的php3.0.17開始的都是執行緒安全的版本,這是由於與linux unix系統是採用 多程序的工作方式不同的是win...