當前位置:才華齋>計算機>java語言>

Java中同步與併發的運用

java語言 閱讀(6.76K)
  Java中同步與併發的運用

1.同步容器類包括兩部分:vector和hashtable

Java中同步與併發的運用

另一類是同步包裝類,由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個執行緒繼續。