日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Concurrent包下的常用并发类和普通类之间的区别

發布時間:2025/3/19 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Concurrent包下的常用并发类和普通类之间的区别 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1. ConcurrentHashMap和HashMap以及Hashtable之間的區別

1.1 HashMap不是線程安全的,key和value都可為null;而Hashtable是線程安全的,代碼中要求value不為null,但是在計算key的hashcode是直接調用,所以key也不能為null。

1.2 但Hashtable是鎖住整個hash表,而ConcurrentHashMap是將hash表分為多個segment,每次操作先將映射到相應的segment,因為segment繼承了ReentrantLock,所以segment操作可以保證線程安全,這樣鎖的粒度變細,并發性能提升明顯。key和value都不能為null,因為value為null無法判斷數據不存在還是數據存在但為null,存在歧義;而對于HashMap在get(key)獲得null時,可以在不并發的情況調用contains(key)來解決歧義。

2. ConcurrenLinkedQueue和LinkedBlockingQueue之間的區別

2.1 ConcuLinkedQueue是非阻塞隊列,采用CAS+自旋保證并發的數據安全。對于寫操作較多的場景,會增加自旋的次數;但是對于多個讀操作,并不影響性能。

2.2 LinkedBlockingQueue是阻塞隊列,通過鎖機制保證數據安全。如果隊列為空,那么消費者線程被阻塞。所以適合生產者多于消費者的場景

3. CopyOnWriteArrayList和ArrayList

3.1 CopyOnWriteArrayList在實現ArrayList的基礎上,又實現了線程安全。但不是通過加鎖來實現線程安全,因為這樣性能太低;而且對于讀操作是不更改數據的,所以多個讀操作之間不需要加鎖,只有讀寫、寫寫之間需要考慮線程安全。但是,CopyOnWriteArrayList最關鍵的是在讀寫操作并發也不阻塞讀操作,只會對多個寫操作之間進行加鎖。如果存在寫操作,那么先復制一份數據,然后更改,最終再覆蓋原始的數據,這樣在并發場景下可以高效地處理數據。

3.2 CopyOnWriteArrayList讀取數據的源碼分析——沒有加鎖操作

3.3 CopyOnWriteArrayList寫數據的源碼分析——只會進行寫操作的同步

4. CopyOnWriteArraySet

4.1 內部就是CopyOnWriteArrayList

4.2 CopyOnWriteArrayList怎么滿足CopyOnWriteArraySet的元素不重復性質

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的Concurrent包下的常用并发类和普通类之间的区别的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。