所謂非線程安全就是當用多線程操作時會出現預期之外的情況
先舉幾個例子:
ArrayList,LinkedList是非線程安全的,Vector是線程安全的;
HashMap是非線程安全的,HashTable是線程安全的;
StringBuilder是非線程安全的,StringBuffer是線程安全的
如:使用多線程想想ArrayList中添加元素,那麼非常有可能實際添加進入的對象個數,跟你期望的並不一樣
而如果我們使用Vector那就不會出現這個情況,也就線程安全的了.
List<Object> list = new Vector<Object>();
在編寫程序時究竟該如何選擇呢?
非線程安全是指多線程操作同一個對象可能會出現問題。而線程安全則是多線程操作同一個對象不會有問題。
線程安全必須要使用很多synchronized關鍵字來同步控制,所以必然會導致性能的降低。
所以在使用的時候,如果是多個線程操作同一個對象,那麼使用線程安全的Vector;否則,就使用效率更高的ArrayList。
但是,事情並沒有這麼簡單, 非線程安全並不意味著不安全
當我的程序是多線程時我就必須使用Vector而不是ArrayList,這種想法是不正確的
當多個線程操作的並非同一個對象時,使用非線程安全的ArrayList是完全沒有問題的.
線程安全的類應當封裝了所有必要的同步操作,調用者無需額外的同步。