執行緒安全問題之所以存在,本質原因是:
當多個執行緒訪問同乙個資料的時候,可能引起衝突。而且這些執行緒中至少有乙個執行緒會改寫這個資料時才會出現衝突,如果所有執行緒都唯讀不改寫,則不會衝突。由於這個資料不只被乙個執行緒訪問,我們稱這個資料為共享資料。
類中一般會出現三種資料:
靜態成員變數對於第二種變數,同乙個類的不同的物件例項有不同的成員變數,所以多個執行緒如果可以確定是在操作不同的物件,就不會存在衝突。如果多個執行緒操作的是同乙個物件例項,則需要考慮對類內普通成員變數操作的執行緒安全問題。普通成員變數
方法裡定義的區域性變數(包括方法引數變數)。
對於第三種變數,因為這種變數在記憶體中只有乙個副本,所以無論什麼時候操作這種變數都需要考慮執行緒安全問題。
JAVA執行緒安全
執行緒安全就是說多執行緒訪問同一 不會產生不確定的結果。編寫執行緒安全的 是依靠執行緒同步。在多執行緒環境中,當各執行緒不共享資料的時候,那麼一定是執行緒安全的。問題是這種情況並不多見,在多數情況下需要共享資料,這時就需要進行適當的同步控制了。執行緒安全一般都涉及到synchronized 就是一段...
Java執行緒安全和非執行緒安全
arraylist是非執行緒安全的,vector是執行緒安全的 hashmap是非執行緒安全的,hashtable是執行緒安全的 stringbuilder是非執行緒安全的,stringbuffer是執行緒安全的 什麼是執行緒安全?執行緒安全和非執行緒安全有什麼區別?分別在什麼情況下使用?非執行緒安...
java執行緒安全退出
在多執行緒程式設計中,某些情況下,主線程需要等待子執行緒安全退出後,主線程在繼續執行。為了實現這個效果,我借助thread類isalive 方法來實現。isalive 方法是判斷執行緒是否是活躍狀態。以下是實現 class test 類是主線程。class processaccept 類是子執行緒。...