Java中同步與并發(fā)用法分析
本文較為詳細(xì)的分析了Java中同步與并發(fā)的用法。分享給大家供大家參考。具體分析如下:
1.同步容器類包括兩部分:vector和hashtable
另一類是同步包裝類,由Collections.synchronizedXXX創(chuàng)建。同步容器對(duì)容器的所有狀態(tài)進(jìn)行串行訪問,從而實(shí)現(xiàn)線程安全。
它們存在如下問題:
a) 對(duì)于符合操作,需要額外的鎖保護(hù)。比如迭代,缺少則添加等條件運(yùn)算。
b) toString,hashCode,equals都會(huì)間接的調(diào)用迭代,都需要注意并發(fā)。
2.java5.0中的并發(fā)容器。
ConcurrentHashMap可以替代同步Map實(shí)現(xiàn)。
當(dāng)主要為讀操作時(shí),CopyOnWriteArrayList是List的同步實(shí)現(xiàn)。
同時(shí),增加了Queue和BlockingQueue:ConcurentLinkedQueue:FIFO隊(duì)列。
PriorityQueue:非并發(fā)的優(yōu)先級(jí)順序隊(duì)列。
BlockingQueue則增加了可阻塞的插入和獲取。
a) ConcurentHashMap:不是使用一個(gè)公共鎖,而是分離鎖。任意數(shù)量的讀線程可以并發(fā)訪問map,讀者和寫者也可以并發(fā)訪問Map,并且有限數(shù)量的寫還可以并發(fā)修改Map。但是,size和isEmpty語言被弱化,是估算值。
b) CopyOnWriteArrayList:迭代器保留一個(gè)底層基礎(chǔ)數(shù)組引用,改引用不會(huì)修改。
3.Synchronizer
a) 閉鎖(CountDownLatch)。構(gòu)造函數(shù)參數(shù)為n,通過countDown,n為0后,所有await的線程繼續(xù)執(zhí)行。
b) FutureTask:計(jì)算由Callable實(shí)現(xiàn),可以攜帶結(jié)果的Runnable。包括:等待,運(yùn)行和完成。
c) Semaphore:控制能夠同時(shí)訪問的活動(dòng)數(shù)量
d) CyclicBarrier:類似于閉鎖。閉鎖等待的是事件,關(guān)卡等待的是其他線程。初始n,Runnable r,n個(gè)線程都await(),當(dāng)n個(gè)線程都執(zhí)行完成后到達(dá)關(guān)卡時(shí),r執(zhí)行,關(guān)卡重置,n個(gè)線程繼續(xù)。
希望本文所述對(duì)大家的java程序設(shè)計(jì)有所幫助。
相關(guān)文章
詳解Spring MVC攔截器實(shí)現(xiàn)session控制
這篇文章主要介紹了詳解Spring MVC攔截器實(shí)現(xiàn)session控制,使用session監(jiān)聽,重復(fù)登錄后,強(qiáng)制之前登錄的session過期。有興趣的可以了解一下。2017-01-01SpringBoot:JPA + AuditingEntityListener時(shí)區(qū)設(shè)置方式
這篇文章主要介紹了SpringBoot:JPA + AuditingEntityListener時(shí)區(qū)設(shè)置方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-12-12使用SpringAop動(dòng)態(tài)獲取mapper執(zhí)行的SQL,并保存SQL到Log表中
這篇文章主要介紹了使用SpringAop動(dòng)態(tài)獲取mapper執(zhí)行的SQL,并保存SQL到Log表中問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-03-03SpringBoot使用自定義注解+AOP+Redis實(shí)現(xiàn)接口限流的實(shí)例代碼
這篇文章主要介紹了SpringBoot使用自定義注解+AOP+Redis實(shí)現(xiàn)接口限流,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-09-09比較Java數(shù)組和各種List的性能小結(jié)
這篇文章主要是分別對(duì)Java數(shù)組、ArrayList、LinkedList和Vector進(jìn)行隨機(jī)訪問和迭代等操作,并比較這種集合的性能。有需要的可以參考借鑒。2016-08-08DUBBO 日志過濾器,輸出dubbo 接口調(diào)用入?yún)?、出參等信?最新推薦)
這篇文章主要介紹了DUBBO 日志過濾器,輸出dubbo 接口調(diào)用入?yún)?、出參等信?首先自定義一個(gè)過濾器?DubboLoggerFilter.java,本文結(jié)合示例代碼給大家講解的非常詳細(xì),需要的朋友可以參考下2022-12-12Spring AOP如何整合redis(注解方式)實(shí)現(xiàn)緩存統(tǒng)一管理詳解
這篇文章主要給大家介紹了關(guān)于Spring AOP如何整合redis(注解方式)實(shí)現(xiàn)緩存統(tǒng)一管理的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2018-08-08