線程安全:當多個線程類併發操作某類的某個方法,(在該方法內部)來修改這個類的某個成員變量的值,
不會出錯,則我們就說,該的這個方法是線程安全的。
線程不安全(非線程安全):當多個線程類併發操作某類的某個方法,(在該方法內部)來修改這個類的某個成員
變量的值,很容易就會發生錯誤,故我們就說,這個方法是線程不安全的。如果要把這個方法變成線
程安全的,則用 synchronized關鍵字來修飾該方法即可。
總結:線程安全對共享變量互斥訪問
非線程安全不是
所以要是線程間數據相關則而又不是線程安全的話,很危險的
舉例說明:ArrayList和Vector、 HashMap和HashTable、StringBuilder和StringBuffer
ArrayList是非線程安全的,Vector是線程安全的;
HashMap是非線程安全的,HashTable是線程安全的;
StringBuilder是非線程安全的,StringBuffer是線程安全的。
ArrayList和Vector:
1、如果List不會被多線程併發訪問,使用ArrayList就沒有問題,而且速度效率要高些;
2、如果有多線程併發訪問List,可以使用Vector,也可以使用ArrayList,
並且自己對可能出現併發衝突的地方自行做synchronized處理。
簡單的來講,在多線程情況下 vector.add(e),這樣寫就好了,如果你用ArrayList.add(e),那麼你就得這樣
synchronized(ArrayList)
{
ArrayList.add(e)
}
vector:內部已經做了這樣的處理了