- 相關(guān)推薦
Java中同步與并發(fā)的運用
Java中同步與并發(fā)的運用
1.同步容器類(lèi)包括兩部分:vector和hashtable
另一類(lèi)是同步包裝類(lèi),由Collections.synchronizedXXX創(chuàng )建。同步容器對容器的所有狀態(tài)進(jìn)行串行訪(fǎng)問(wèn),從而實(shí)現線(xiàn)程安全。
它們存在如下問(wèn)題:
a) 對于符合操作,需要額外的鎖保護。比如迭代,缺少則添加等條件運算。
b) toString,hashCode,equals都會(huì )間接的調用迭代,都需要注意并發(fā)。
2.java5.0中的.并發(fā)容器。
ConcurrentHashMap可以替代同步Map實(shí)現。
當主要為讀操作時(shí),CopyOnWriteArrayList是List的同步實(shí)現。
同時(shí),增加了Queue和BlockingQueue:ConcurentLinkedQueue:FIFO隊列。
PriorityQueue:非并發(fā)的優(yōu)先級順序隊列。
BlockingQueue則增加了可阻塞的插入和獲取。
a) ConcurentHashMap:不是使用一個(gè)公共鎖,而是分離鎖。任意數量的讀線(xiàn)程可以并發(fā)訪(fǎng)問(wèn)map,讀者和寫(xiě)者也可以并發(fā)訪(fǎng)問(wèn)Map,并且有限數量的寫(xiě)還可以并發(fā)修改Map。但是,size和isEmpty語(yǔ)言被弱化,是估算值。
b) CopyOnWriteArrayList:迭代器保留一個(gè)底層基礎數組引用,改引用不會(huì )修改。
3.Synchronizer
a) 閉鎖(CountDownLatch)。構造函數參數為n,通過(guò)countDown,n為0后,所有await的線(xiàn)程繼續執行。
b) FutureTask:計算由Callable實(shí)現,可以攜帶結果的Runnable。包括:等待,運行和完成。
c) Semaphore:控制能夠同時(shí)訪(fǎng)問(wèn)的活動(dòng)數量
d) CyclicBarrier:類(lèi)似于閉鎖。閉鎖等待的是事件,關(guān)卡等待的是其他線(xiàn)程。初始n,Runnable r,n個(gè)線(xiàn)程都await(),當n個(gè)線(xiàn)程都執行完成后到達關(guān)卡時(shí),r執行,關(guān)卡重置,n個(gè)線(xiàn)程繼續。
【Java中同步與并發(fā)的運用】相關(guān)文章:
java并發(fā)編程參考12-01
Java線(xiàn)程同步的方法05-27
Java并發(fā)編程:深入剖析ThreadLocal03-15
java多線(xiàn)程的同步和異步02-02
從 JDK 源碼角度看 java 并發(fā)線(xiàn)程的中斷03-09
Java的設計模式編程中責任鏈模式的運用的實(shí)例講解07-07