糯米文學吧

位置:首頁 > 計算機 > java語言

Java中同步與併發的運用

java語言6.38K
  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個線程繼續。

標籤:JAVA 併發 同步