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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java有线程安全的set吗?

發布時間:2025/3/20 java 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java有线程安全的set吗? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

今日推薦

Web登錄很簡單?開玩笑!知乎熱問:國家何時整治程序員的高薪現象?太可怕了!注解+反射優雅的實現Excel導入導出(通用版)Fluent Mybatis 牛逼!Nginx 常用配置清單這玩意比ThreadLocal叼多了,嚇得我趕緊分享出來。

來源:blog.csdn.net/li_canhui/article/details/91393247

在多線程環境下,要使用線程安全的集合,比如,ConcurrentHashMap是線程安全的HashMap,CopyOnWriteArrayList是線程安全的ArrayList。那么HashSet對應的線程安全集合,是什么呢?java有沒有提供默認實現呢?

在java的concurrent包中,我找到了CopyOnWriteArraySet,那么它是線程安全的嗎?下面是測試代碼。

public?static?void?main(String[]?args)?{Set<String>?set?=?new?CopyOnWriteArraySet<>();ExecutorService?service?=?Executors.newFixedThreadPool(12);int?times?=?10000;AtomicInteger?flag?=?new?AtomicInteger(0);for(int?i?=?0;?i?<?times;?i?++){service.execute(()->{set.add("a"?+?flag.getAndAdd(1));});}service.shutdown();try?{service.awaitTermination(Long.MAX_VALUE,?TimeUnit.DAYS);}catch?(Exception?e){e.printStackTrace();}System.out.println(set.size());}

經過多次執行,結果都是10000。可以說明,CopyOnWriteArraySet是線程安全的Set。

那么CopyOnWriteArraySet是如何保證寫入時的線程安全呢?以下是CopyOnWriteArraySet的add源碼。

????public?boolean?add(E?e)?{return?al.addIfAbsent(e);}public?boolean?addIfAbsent(E?e)?{Object[]?snapshot?=?getArray();return?indexOf(e,?snapshot,?0,?snapshot.length)?>=?0???false?:addIfAbsent(e,?snapshot);}private?static?int?indexOf(Object?o,?Object[]?elements,int?index,?int?fence)?{if?(o?==?null)?{for?(int?i?=?index;?i?<?fence;?i++)if?(elements[i]?==?null)return?i;}?else?{for?(int?i?=?index;?i?<?fence;?i++)if?(o.equals(elements[i]))return?i;}return?-1;}private?boolean?addIfAbsent(E?e,?Object[]?snapshot)?{final?ReentrantLock?lock?=?this.lock;lock.lock();try?{Object[]?current?=?getArray();int?len?=?current.length;if?(snapshot?!=?current)?{//?Optimize?for?lost?race?to?another?addXXX?operationint?common?=?Math.min(snapshot.length,?len);for?(int?i?=?0;?i?<?common;?i++)if?(current[i]?!=?snapshot[i]?&&?eq(e,?current[i]))return?false;if?(indexOf(e,?current,?common,?len)?>=?0)return?false;}Object[]?newElements?=?Arrays.copyOf(current,?len?+?1);newElements[len]?=?e;setArray(newElements);return?true;}?finally?{lock.unlock();}}

從源碼可以看出,CopyOnWriteArraySet底層采用了CopyOnWriteArrayList數據結構來實現。在add元素時,采用的是可重入鎖來實現線程安全。

歡迎一鍵三連

推薦一些很不錯的計算機學習教程,包括:數據結構、算法、計算機網絡、操作系統、Java(spring、springmvc、springboot、springcloud等)等等 ,全部收集于網絡,如果有侵權,請聯系刪除!

下面是部分截圖:

獲取方式點擊下方公眾號,回復:好好學Java,即可獲取。

總結

以上是生活随笔為你收集整理的Java有线程安全的set吗?的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 久久人人精| 日本免费网站在线观看 | 国产资源在线免费观看 | 四虎国产精品成人免费入口 | 日韩电影一区二区三区 | 91色吧| 国产网站入口 | 欧美精品99久久久 | 亚洲三级视频 | 日本午夜影视 | 免费看一级| 欧美日韩在线观看视频 | 伊人91视频 | 国产aⅴ精品一区二区三区久久 | av中文字幕在线免费观看 | 一级aaaa毛片 | 理论片在线观看视频 | 国产美女91呻吟求 | 国产视频二区三区 | 欧美另类高清videos的特点 | 99久久久无码国产精品免费蜜柚 | 超级变态重口av番号 | 成人涩涩网 | www99re| 夜夜春很很躁夜夜躁 | 午夜影院在线 | 熟女少妇精品一区二区 | 性欧美视频 | 国产欧美综合一区二区三区 | av影片在线播放 | 精品国产大片大片大片 | 中日韩中文字幕一区二区 | 国产日产精品一区二区 | 精品国产自在精品国产精小说 | av日韩精品 | av在线电影网站 | 日本伦理在线 | 久久九九99 | 一眉道姑 | 欧美极品少妇xxxxⅹ猛交 | 久久久久久久久久久久久久久久久 | 欧美性插动态图 | 午夜免费激情视频 | 国语对白做受xxxxx在线中国 | 国产亚洲91 | 日日操夜夜骑 | 热99视频 | 久久一卡二卡 | 99久久久无码国产精品免费麻豆 | 天堂中文在线播放 | 97视频网站 | 国产懂色av | 欧美日韩亚洲天堂 | 香蕉色视频 | 青青草免费看 | 91av影视| 男人操女人的免费视频 | 老司机精品福利导航 | 日本打屁股网站 | 欧美伊人影院 | 中文字幕第27页 | 日韩中文字幕网站 | 欧美人与zoxxxx另类 | 国产综合第一页 | 91伊人久久| 丰满熟妇人妻av无码区 | 91视频.com| 色综合天天射 | 丁香激情小说 | 国产精品久久久久久久久免费相片 | 亚洲啊v在线| 青青草一区 | 成人精品综合 | 久久亚洲精品中文字幕 | 九九色综合网 | 日本免费三级网站 | av片大全| 免费黄色网址在线观看 | 午夜影院操 | 欧美3p视频 | 视频二区中文字幕 | 久久久精品人妻无码专区 | 拍摄av现场失控高潮数次 | 影音先锋国产精品 | 韩国三级hd两男一女 | 免费看的毛片 | 在线成人小视频 | 中文字幕久久精品 | 少妇第一次交换又紧又爽 | 一乃葵在线 | 射美女| 欧美成人一区二区视频 | 久久精品国产一区二区 | 四虎影视8848hh| 亚洲精品一区二区 | 激情综合小说 | 99久久久精品| 欧美在线一区二区 | 亚洲乱熟女一区二区 |