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...