高併發編程原理與實戰.線程安全.鎖原理.同步容器.實戰之JAVA架構

一、什麼叫容器?數組

-----》數組,對象,集合等等都是容器。安全

 

二、什麼叫同步容器?多線程

-----》Vector,ArrayList,HashMap等等。併發

 

三、在多線程環境下,爲何不用同步容器呢?ide

----》一、線程不安全問題。二、線程安全的狀況下,可是性能很是差問題。性能

 

Vector(線程安全,基本不用)----》ArrayList(線程不安全)----》使用Collections.synchronizedList()將ArrayList轉成線程安全(性能很是差,不經常使用)------》CopyOnWriteArrayList(併發容器,有讀寫分離的思想)spa

 

HashTable(線程安全,基本不用)----》HashMap(線程不安全)-----》使用Collections.synchronizedMap()將HashMap轉成線程安全(性能很是差,不經常使用)-------》ConcurrentHashMap(併發容器,利用下降鎖的力度,例如將一張大表分紅多張小表,若是進行添加操做的時候,只須要鎖一個小表,而不須要鎖整張表,從而提升了效率)線程

 

Vector和ArrayList有什麼區別呢?orm

-----》Vector是線程安全的,看源代碼上,它的add方法和remove方法都是加上了synchronized,意味着是單線程執行的,起不了多線程的優點。ArrayList是線程不安全的,add和remove都沒synchronized。對象

 

ArrayList不安全有什麼影響?

------》有可能沒法將值添加到同步容器中。

相關文章
相關標籤/搜索