程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Java的線程安全與非線程安全教程

Java的線程安全與非線程安全教程

編輯:關於JAVA
 

所謂非線程安全就是當用多線程操作時會出現預期之外的情況

先舉幾個例子:

ArrayList,LinkedList是非線程安全的,Vector是線程安全的;

HashMap是非線程安全的,HashTable是線程安全的;

StringBuilder是非線程安全的,StringBuffer是線程安全的

如:使用多線程想想ArrayList中添加元素,那麼非常有可能實際添加進入的對象個數,跟你期望的並不一樣

而如果我們使用Vector那就不會出現這個情況,也就線程安全的了.

List<Object> list = new Vector<Object>();

 

在編寫程序時究竟該如何選擇呢?

非線程安全是指多線程操作同一個對象可能會出現問題。而線程安全則是多線程操作同一個對象不會有問題。

 

線程安全必須要使用很多synchronized關鍵字來同步控制,所以必然會導致性能的降低。

 

所以在使用的時候,如果是多個線程操作同一個對象,那麼使用線程安全的Vector;否則,就使用效率更高的ArrayList。

 

但是,事情並沒有這麼簡單, 非線程安全並不意味著不安全

當我的程序是多線程時我就必須使用Vector而不是ArrayList,這種想法是不正確的

當多個線程操作的並非同一個對象時,使用非線程安全的ArrayList是完全沒有問題的.

 

線程安全的類應當封裝了所有必要的同步操作,調用者無需額外的同步。

 
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved