亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Java并發(fā)容器介紹

 更新時(shí)間:2021年10月23日 12:15:07   作者:碼農(nóng)飛哥  
這篇文章主要介紹了Java并發(fā)容器,Java并發(fā)包(concurrent)是Java用來(lái)處理并發(fā)問(wèn)題的利器,該并發(fā)包中主要有原子類,鎖(lock),并發(fā)容器類等等。本系列博客主要就是介紹并發(fā)包中一些常用的并發(fā)容器,常用的類,那么我們就來(lái)看看下面文章的詳細(xì)內(nèi)容吧

Java并發(fā)包(concurrent)是Java用來(lái)處理并發(fā)問(wèn)題的利器,該并發(fā)包中主要有原子類,鎖(lock),并發(fā)容器類等等。本系列博客主要就是介紹并發(fā)包中一些常用的并發(fā)容器,常用的類。那么就讓我們一起來(lái)揭開(kāi)并發(fā)包的面紗吧。

環(huán)境:

基于JDK1.8

1、原子類

首先登場(chǎng)的就是我們的原子類。啥是原子類?原子類用啥用?
第一個(gè)問(wèn)題,啥是原子類:操作具有原子性的類,我們稱之為原子類。為啥要有原子類呢?
原子類是為了保證操作的原子性。例如:long i=0; i=i+1(i為全局變量),在多線程的環(huán)境下,就有線程安全的問(wèn)題,因?yàn)椋?code>i=i+1這個(gè)操作分為三條CPU指令執(zhí)行。指令執(zhí)行完之后會(huì)發(fā)生指令切換,造成可見(jiàn)性問(wèn)題。但是,如果我們使用AtomicLong類來(lái)包裝i,然后調(diào)用getAndIncrement()方法(該方法是具有原子性的),則可以保證其安全性。

 AtomicLong atest = new AtomicLong(0);
 atest.getAndIncrement();

原子類主要有如下幾個(gè):

2、鎖

原子類說(shuō)完了,我們接著來(lái)說(shuō)說(shuō)鎖,我們都知道Javasynchronized關(guān)鍵字作為同步鎖,同時(shí),在并發(fā)包中還提供了Lock鎖。關(guān)于Locksynchronized的區(qū)別后面會(huì)有說(shuō)到。

鎖的類圖如下:

3、并發(fā)容器

簡(jiǎn)單的說(shuō)完了鎖,我們接著來(lái)看重頭戲并發(fā)容器。雖然,Java中提供了同步容器VectorCollections包裝的容器。但是同步容器最大的問(wèn)題就是性能太差。因?yàn)槠涫侵苯訉?duì)添加元素,刪除元素,讀取元素的所有方法都加鎖。
所有在并發(fā)包中提供了并發(fā)容器,并發(fā)容器的實(shí)現(xiàn)后面我們?cè)陉U述。

我們先看看有哪些并發(fā)容器。
按照數(shù)據(jù)結(jié)構(gòu)類型分類來(lái)看。

4、List接口下

List 接口下有CopyOnWriteArrayList實(shí)現(xiàn)類。其實(shí)現(xiàn)是內(nèi)部維護(hù)了一個(gè)數(shù)組,成員變量array就指向這個(gè)內(nèi)部數(shù)組,讀操作都是基于array進(jìn)行的,寫(xiě)操作的話,
CopyOnWriteArrayList會(huì)將array復(fù)制一份,然后,在新復(fù)制處理的數(shù)組上執(zhí)行增加元素的操作。執(zhí)行完之后再將array指向這個(gè)新的數(shù)組。僅僅適用于寫(xiě)操作非常少的場(chǎng)景,而且能夠容忍讀寫(xiě)的短暫不一致的情況。

5、Map接口下

Map 接口下有ConcurrentHashMapConcurrentSkipListMap。ConcurrentHashMap內(nèi)部的數(shù)據(jù)結(jié)構(gòu)跟HashMap一致,都是數(shù)組+鏈表+紅黑樹(shù)的結(jié)構(gòu)。ConcurrentSkipListMap內(nèi)部的數(shù)據(jù)結(jié)構(gòu)則是數(shù)組+跳表的數(shù)組結(jié)構(gòu)。

6、Set接口下

Set接口下面有ConcurrentSkipListSetCopyOnWriteArraySet兩個(gè)并發(fā)類。

7、Queue接口下

Queue接口下的并發(fā)容器類比較多,阻塞隊(duì)列BlockingQueue接口下有

單端堵塞隊(duì)列:

  • ArrayBlockingQueue
  • LinkedBlockingQueue
  • SynchronousQueue
  • LinkedTransferQueue
  • PriorityBlockingQueue
  • DelayQueue

雙端阻塞隊(duì)列:LinkedBlockingDeque

非阻塞隊(duì)列有:單端隊(duì)列ConcurrentLinkedQueue,雙端隊(duì)列ConcurrentLinkedDeque

總結(jié):

到此這篇關(guān)于Java并發(fā)容器介紹的文章就介紹到這了,更多相關(guān)Java并發(fā)容器內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringBoot2 JPA解決懶加載異常的問(wèn)題

    SpringBoot2 JPA解決懶加載異常的問(wèn)題

    這篇文章主要介紹了SpringBoot2 JPA解決懶加載異常的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-01-01
  • java通過(guò)方向鍵控制小球移動(dòng)的小游戲

    java通過(guò)方向鍵控制小球移動(dòng)的小游戲

    這篇文章主要為大家詳細(xì)介紹了java通過(guò)方向鍵控制小球移動(dòng)的小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • Java非法字符: ‘\ufeff‘問(wèn)題及說(shuō)明

    Java非法字符: ‘\ufeff‘問(wèn)題及說(shuō)明

    這篇文章主要介紹了Java非法字符: ‘\ufeff‘問(wèn)題及說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • 使用RocketMQTemplate發(fā)送帶tags的消息

    使用RocketMQTemplate發(fā)送帶tags的消息

    這篇文章主要介紹了使用RocketMQTemplate發(fā)送帶tags的消息,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • 基于SpringBoot核心原理(自動(dòng)配置、事件驅(qū)動(dòng)、Condition)

    基于SpringBoot核心原理(自動(dòng)配置、事件驅(qū)動(dòng)、Condition)

    這篇文章主要介紹了基于SpringBoot核心原理(自動(dòng)配置、事件驅(qū)動(dòng)、Condition),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-08-08
  • Java利用VLC開(kāi)發(fā)簡(jiǎn)易視屏播放器功能

    Java利用VLC開(kāi)發(fā)簡(jiǎn)易視屏播放器功能

    這篇文章主要介紹了Java利用VLC開(kāi)發(fā)簡(jiǎn)易視屏播放器,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-08-08
  • SpringBoot之HandlerInterceptor攔截器的使用詳解

    SpringBoot之HandlerInterceptor攔截器的使用詳解

    這篇文章主要介紹了SpringBoot之HandlerInterceptor攔截器的使用詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • Ubuntu安裝jdk8常用方法流程解析

    Ubuntu安裝jdk8常用方法流程解析

    這篇文章主要介紹了Ubuntu安裝jdk8常用方法流程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-11-11
  • Java終止線程的幾種方式實(shí)例總結(jié)

    Java終止線程的幾種方式實(shí)例總結(jié)

    這篇文章主要給大家介紹了關(guān)于Java終止線程的幾種方式,線程停止即Terminated狀態(tài)是伴隨run方法的結(jié)束而生,也就是run完成后由Thread類來(lái)決定線程停止了,銷毀資源釋放空間,下面需要的朋友可以參考下
    2023-06-06
  • 關(guān)于Mybatis的@param注解及多個(gè)傳參

    關(guān)于Mybatis的@param注解及多個(gè)傳參

    這篇文章主要介紹了關(guān)于Mybatis的@param注解及多個(gè)傳參,@Param的作用就是給參數(shù)命名,比如在mapper里面某方法A(int id),當(dāng)添加注解后A(@Param(“userId”) int id),也就是說(shuō)外部想要取出傳入的id值,只需要取它的參數(shù)名userId就可以了,需要的朋友可以參考下
    2023-05-05

最新評(píng)論