Java入門教程-Java線程安全的常用類

線程安全類
在集合框架中,有些類是線程安全的,這些都是jdk1.1中的出現(xiàn)的。在jdk1.2之后,就出現(xiàn)許許多多非線程安全的類。下面是這些線程安全的同步的類:
vector:就比arraylist多了個(gè)同步化機(jī)制(線程安全),因?yàn)樾瘦^低,現(xiàn)在已經(jīng)不太建議使用。在web應(yīng)用中,特別是前臺(tái)頁面,往往效率(頁面響應(yīng)速度)是優(yōu)先考慮的。
statck:堆棧類,先進(jìn)后出
hashtable:就比hashmap多了個(gè)線程安全
除了這些之外,其他的集合大都是非線程安全的類和接口。
線程安全的類其方法是同步的,每次只能一個(gè)訪問。是重量級(jí)對(duì)象,效率較低。
其他:
1.hashtable跟hashmap的區(qū)別
hashtable是線程安全的,即hashtable的方法都提供了同步機(jī)制;hashmap不是線程安全的,即不提供同步機(jī)制;hashtable不允許插入空值,hashmap允許!
2.多線程并發(fā)修改一個(gè)集合怎么辦?
用老的Vector/Hashtable類
StringBuffer是線程安全,而StringBuilder是線程不安全的。對(duì)于安全與不安全沒有深入的理解情況下,易造成這樣的錯(cuò)覺,如果對(duì)于StringBuffer的操作均是線程安全的,然而,Java給你的保證的線程安全,是說它的方法是執(zhí)行是排它的,而不是對(duì)這個(gè)對(duì)象本身的多次調(diào)用情況下,還是安全的??纯聪逻叺睦樱赟tringBufferTest中有一個(gè)數(shù)據(jù)成員contents它是用來擴(kuò)展的,它的每一次append是線程安全的,但眾多次append的組合并不是線程安全的,這個(gè)輸出結(jié)果不是太可控的,但如果對(duì)于log和getContest方法加關(guān)鍵字synchronized,那么結(jié)果就會(huì)變得非常條理,如果換成StringBuider甚至是append到一半,它也會(huì)讓位于其它在此基礎(chǔ)上操作的線程