Java中同步與并發(fā)用法分析
本文較為詳細的分析了Java中同步與并發(fā)的用法。分享給大家供大家參考。具體分析如下:
1.同步容器類包括兩部分:vector和hashtable
另一類是同步包裝類,由Collections.synchronizedXXX創(chuàng)建。同步容器對容器的所有狀態(tài)進行串行訪問,從而實現線程安全。
它們存在如下問題:
a) 對于符合操作,需要額外的鎖保護。比如迭代,缺少則添加等條件運算。
b) toString,hashCode,equals都會間接的調用迭代,都需要注意并發(fā)。
2.java5.0中的并發(fā)容器。
ConcurrentHashMap可以替代同步Map實現。
當主要為讀操作時,CopyOnWriteArrayList是List的同步實現。
同時,增加了Queue和BlockingQueue:ConcurentLinkedQueue:FIFO隊列。
PriorityQueue:非并發(fā)的優(yōu)先級順序隊列。
BlockingQueue則增加了可阻塞的插入和獲取。
a) ConcurentHashMap:不是使用一個公共鎖,而是分離鎖。任意數量的讀線程可以并發(fā)訪問map,讀者和寫者也可以并發(fā)訪問Map,并且有限數量的寫還可以并發(fā)修改Map。但是,size和isEmpty語言被弱化,是估算值。
b) CopyOnWriteArrayList:迭代器保留一個底層基礎數組引用,改引用不會修改。
3.Synchronizer
a) 閉鎖(CountDownLatch)。構造函數參數為n,通過countDown,n為0后,所有await的線程繼續(xù)執(zhí)行。
b) FutureTask:計算由Callable實現,可以攜帶結果的Runnable。包括:等待,運行和完成。
c) Semaphore:控制能夠同時訪問的活動數量
d) CyclicBarrier:類似于閉鎖。閉鎖等待的是事件,關卡等待的是其他線程。初始n,Runnable r,n個線程都await(),當n個線程都執(zhí)行完成后到達關卡時,r執(zhí)行,關卡重置,n個線程繼續(xù)。
希望本文所述對大家的java程序設計有所幫助。
相關文章
SpringCloud可視化鏈路追蹤系統(tǒng)Zipkin部署過程
這篇文章主要介紹了SpringCloud可視化鏈路追蹤系統(tǒng)Zipkin部署過程,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-03-03
使用Java接收和處理OpenTelemetry數據的完整指南
在現代分布式系統(tǒng)中,OpenTelemetry 成為了一種常見的標準,用于跟蹤和監(jiān)控應用程序的性能和行為,OTLP是 OpenTelemetry 社區(qū)定義的一種數據傳輸協議,文將介紹如何使用 Java 編寫代碼來接收和處理 OTLP 數據,需要的朋友可以參考下2024-04-04
java通過MySQL驅動攔截器實現執(zhí)行sql耗時計算
本文主要介紹了java通過MySQL驅動攔截器實現執(zhí)行sql耗時計算,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2023-03-03
使用@Autowired可以注入ApplicationContext
這篇文章主要介紹了使用@Autowired可以注入ApplicationContext問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-06-06

