1.同步容器類包括兩部分:vector和hashtable
另一類是同步包裝類,由hronizedXXX建立。同步容器對容器的所有狀態進行序列訪問,從而實現執行緒安全。
它們存在如下問題:
a) 對於符合操作,需要額外的鎖保護。比如迭代,缺少則新增等條件運算。
b) toString,hashCode,equals都會間接的呼叫迭代,都需要注意併發。
5.0中的併發容器。
ConcurrentHashMap可以替代同步Map實現。
當主要為讀操作時,CopyOnWriteArrayList是List的'同步實現。
同時,增加了Queue和BlockingQueue:ConcurentLinkedQueue:FIFO佇列。
PriorityQueue:非併發的優先順序順序佇列。
BlockingQueue則增加了可阻塞的插入和獲取。
a) ConcurentHashMap:不是使用一個公共鎖,而是分離鎖。任意數量的讀執行緒可以併發訪問map,讀者和寫者也可以併發訪問Map,並且有限數量的寫還可以併發修改Map。但是,size和isEmpty語言被弱化,是估算值。
b) CopyOnWriteArrayList:迭代器保留一個底層基礎陣列引用,改引用不會修改。
hronizer
a) 閉鎖(CountDownLatch)。建構函式引數為n,通過countDown,n為0後,所有await的執行緒繼續執行。
b) FutureTask:計算由Callable實現,可以攜帶結果的Runnable。包括:等待,執行和完成。
c) Semaphore:控制能夠同時訪問的活動數量
d) CyclicBarrier:類似於閉鎖。閉鎖等待的是事件,關卡等待的是其他執行緒。初始n,Runnable r,n個執行緒都await(),當n個執行緒都執行完成後到達關卡時,r執行,關卡重置,n個執行緒繼續。