在集合框架中,有些類是線程安全的,這些都是jdk1.1中的出現(xiàn)的。在jdk1.2之后,就出現(xiàn)許許多多非線程安全的類。 下面是這些線程安全的同步的類:
vector:就比arraylist多了個同步化機制(線程安全),因為效率較低,現(xiàn)在已經(jīng)不太建議使用。在web應用中,特別是前臺頁面,往往效率(頁面響應速度)是優(yōu)先考慮的。
statck:堆棧類,先進后出
hashtable:就比hashmap多了個線程安全
除了這些之外,其他的集合大都是非線程安全的類和接口。
線程安全的類其方法是同步的,每次只能一個訪問。是重量級對象,效率較低。
其他:
1. hashtable跟hashmap的區(qū)別
hashtable是線程安全的,即hashtable的方法都提供了同步機制;hashmap不是線程安全的,即不提供同步機制 ;hashtable不允許插入空值,hashmap允許!
2. 多線程并發(fā)修改一 個集合怎么辦?
用老的Vector/Hashtable類
StringBuffer是線程安全,而StringBuilder是線程不安全的。對于安全與不安全沒有深入的理解情況下,易造成這樣的錯覺,如果對于StringBuffer的操作均是線程安全的,然而,Java給你的保證的線程安全,是說它的方法是執(zhí)行是排它的,而不是對這個對象本身的多次調(diào)用情況下,還是安全的。看看下邊的例子,在StringBufferTest中有一個數(shù)據(jù)成員contents它是用來擴展的,它的每一次append是線程安全的,但眾多次append的組合并不是線程安全的,這個輸出結果不是太可控的,但如果對于log和getContest方法加關鍵字synchronized,那么結果就會變得非常條理,如果換成StringBuider甚至是append到一半,它也會讓位于其它在此基礎上操作的線程
以上所述是小編給大家介紹的Java線程安全的常用類_動力節(jié)點Java學院整理,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對服務器之家網(wǎng)站的支持!