出處:
楊爭 1、什麼是執行緒安全(thread safe)?
乙個類要成為執行緒安全的類,就是在該類被多個執行緒訪問時,不管執行環境中執行這些執行緒有什麼樣的時序安排或者交錯,它仍然執行正確行為,並且在呼叫的**中沒有任何額外的同步。
2、什麼時候考慮執行緒安全問題?
當乙個類的例項為singleton的時候,你就要考慮該例項在呼叫的時候是否是執行緒安全的。
最熟悉的例子就是servlet, 每個servlet在servlet engineer中只有乙個例項。除非它實現singlethreaded介面。所以我們一般要求在servlet中不要定義成員變數,以避免執行緒不安全。
是不是凡是singleton的物件都不是執行緒安全的呢?答案是no。準確的表達應該是:只有該類中定義了有狀態的成員時該類才是執行緒不安全的。
舉個例子:
public class a
}id是乙個有狀態的變數。什麼是有狀態,就是指每次呼叫該類的時候如果該id值可能存在不同的值,那麼這個id就是有狀態的。
我們再看看下面的例子。
public class b
}這個class b在單例項的情況下就是執行緒安全的。原因是:該類沒有有狀態的成員。i,j是區域性變數,某個執行緒都會有自己的stack儲存這些區域性變數。所以對於不同執行緒來說,這些變數是相互不影響的。
總結:1、我們一般要求商業邏輯的bo為執行緒安全的類,這樣就可以將該bo建立成乙個單例項的物件,提高訪問的效率。為了使bo為執行緒安全的物件,我們所要做的很簡單,就是該類中不要有與狀態相關的成員變數。
執行緒安全與執行緒不安全
執行緒安全是針對多執行緒來講的,如果所使用的公用變數在多執行緒下沒有被保護機制時,變數結果會和理論值不一致,這樣就叫作執行緒不安全,相反公用變數在保護機制下工作,就不會出現 隨機 變化,這時叫執行緒安全。執行緒安全 在多執行緒中使用時,不用自已做同步處理.執行緒不安全 在多執行緒中使用時,必須做執行...
執行緒安全與執行緒不安全
執行緒安全是針對多執行緒來講的,如果所使用的公用變數在多執行緒下沒有被保護機制時,變數結果會和理論值不一致,這樣就叫作執行緒不安全,相反公用變數在保護機制下工作,就不會出現 隨機 變化,這時叫執行緒安全。執行緒安全 在多執行緒中使用時,不用自已做同步處理.執行緒不安全 在多執行緒中使用時,必須做執行...
Java執行緒安全和非執行緒安全
arraylist是非執行緒安全的,vector是執行緒安全的 hashmap是非執行緒安全的,hashtable是執行緒安全的 stringbuilder是非執行緒安全的,stringbuffer是執行緒安全的 什麼是執行緒安全?執行緒安全和非執行緒安全有什麼區別?分別在什麼情況下使用?非執行緒安...