电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

Java JUC中操作List安全類的集合案例

瀏覽:107日期:2022-08-09 14:38:47
目錄不安全的集合Java中提供的安全措施JUC下的安全List集合性能方面不安全的集合

在單線程應用中,通常采取new ArrayList(),指定一個List集合,用于存放可重復的數據。

但在多線程下,往往會出現意想不到的問題,代碼如下所示:

import java.util.*;public class ListTest { public static void main(String[] args) throws InterruptedException {// 創建list集合//List<String> lists = Arrays.asList('1', '2', '3');// 不安全List<String> lists = new ArrayList<>();// 開啟十個線程增加數據for (int i = 1; i <= 40; i++) { new Thread(()->{lists.add(UUID.randomUUID().toString().substring(0,5));System.out.println(Thread.currentThread().getName()+'=='+lists); },String.valueOf(i)).start();} }}

其運行結果如下所示:

Java JUC中操作List安全類的集合案例

多線程操作同一集合對象信息,往往會出現java.util.ConcurrentModificationException異常報錯信息。

Java中提供的安全措施

在java語言中,提供了一種新的List集合,java.util.Vector類,具體看下列代碼:

import java.util.*;public class ListTest { public static void main(String[] args) throws InterruptedException {// 創建list集合//List<String> lists = Arrays.asList('1', '2', '3');// 不安全//List<String> lists = new ArrayList<>();List<String> lists = new Vector<>();// 開啟十個線程增加數據for (int i = 1; i <= 40; i++) { new Thread(()->{lists.add(UUID.randomUUID().toString().substring(0,5));System.out.println(Thread.currentThread().getName()+'=='+lists); },String.valueOf(i)).start();} }}

運行日志如下所示:

Java JUC中操作List安全類的集合案例

不會出現java.util.ConcurrentModificationException報錯信息。

為什么能保證數據的安全操作?

Java JUC中操作List安全類的集合案例

采取了 synchronized 針對方法執行調用者加鎖,保證add操作的多線程安全性!

JUC下的安全List集合

在JUC包下,提供有以下幾種創建安全集合的方式。

方式一:Collections.synchronizedList(new ArrayList<>());

import java.util.*;public class ListTest { public static void main(String[] args) throws InterruptedException {List<String> lists = Collections.synchronizedList(new ArrayList<>());// 開啟十個線程增加數據for (int i = 1; i <= 40; i++) { new Thread(()->{lists.add(UUID.randomUUID().toString().substring(0,5));System.out.println(Thread.currentThread().getName()+'=='+lists); },String.valueOf(i)).start();} }}

查看底層源碼實現邏輯

Java JUC中操作List安全類的集合案例

判斷傳入的 list 集合類型,判斷類型是否為 java.util.RandomAccess,如果是則采取java.util.Collections.SynchronizedRandomAccessList構造集合,如果不是則采取java.util.Collections.SynchronizedList構造集合。

源碼中對應的add操作邏輯如下所示:

Java JUC中操作List安全類的集合案例

采取synchronized同步代碼塊的方式,對數據的add操作實現加鎖!

方式二:new CopyOnWriteArrayList();

import java.util.*;import java.util.concurrent.CopyOnWriteArrayList;public class ListTest { public static void main(String[] args) throws InterruptedException {List<String> lists = new CopyOnWriteArrayList<>();// 開啟十個線程增加數據for (int i = 1; i <= 40; i++) { new Thread(()->{lists.add(UUID.randomUUID().toString().substring(0,5));System.out.println(Thread.currentThread().getName()+'=='+lists); },String.valueOf(i)).start();} }}

源碼中的介紹如下:

Java JUC中操作List安全類的集合案例

Java JUC中操作List安全類的集合案例

顯而易見,其邏輯如下所示:

調用add方法后,拿到java.util.concurrent.locks.ReentrantLock對象信息。 調用 lock.lock() 拿到鎖! 將原數組對象copy操作,并創建原數組大小+1的新數組。 將新數據放入新數組中。 任何操作finally,都進行鎖的釋放!性能方面

JUC包下的Lock操作,都比synchronized性能更好!

到此這篇關于JUC中操作List安全類的集合案例的文章就介紹到這了,更多相關JUC中List安全類內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Java
相關文章:
主站蜘蛛池模板: 驾驶式洗地机/扫地机_全自动洗地机_工业洗地机_荣事达工厂官网 | 隔爆型防爆端子分线箱_防爆空气开关箱|依客思 | 焊锡丝|焊锡条|无铅锡条|无铅锡丝|无铅焊锡线|低温锡膏-深圳市川崎锡业科技有限公司 | 旋振筛|圆形摇摆筛|直线振动筛|滚筒筛|压榨机|河南天众机械设备有限公司 | 施工围挡-施工PVC围挡-工程围挡-深圳市旭东钢构技术开发有限公司 | 橡胶电子拉力机-塑料-微电脑电子拉力试验机厂家-江苏天源 | 雪花制冰机(实验室雪花制冰机)百科 | CTP磁天平|小电容测量仪|阴阳极极化_双液系沸点测定仪|dsj电渗实验装置-南京桑力电子设备厂 | 除甲醛公司-甲醛检测治理-杭州创绿家环保科技有限公司-室内空气净化十大品牌 | 金属软管_不锈钢金属软管_巩义市润达管道设备制造有限公司 | 塑木弯曲试验机_铜带拉伸强度试验机_拉压力测试台-倾技百科 | 欧美日韩国产一区二区三区不_久久久久国产精品无码不卡_亚洲欧洲美洲无码精品AV_精品一区美女视频_日韩黄色性爱一级视频_日本五十路人妻斩_国产99视频免费精品是看4_亚洲中文字幕无码一二三四区_国产小萍萍挤奶喷奶水_亚洲另类精品无码在线一区 | 创客匠人-让IP变现不走弯路 | 嘉兴恒升声级计-湖南衡仪声级计-杭州爱华多功能声级计-上海邦沃仪器设备有限公司 | Eiafans.com_环评爱好者 环评网|环评论坛|环评报告公示网|竣工环保验收公示网|环保验收报告公示网|环保自主验收公示|环评公示网|环保公示网|注册环评工程师|环境影响评价|环评师|规划环评|环评报告|环评考试网|环评论坛 - Powered by Discuz! | 临沂招聘网_人才市场_招聘信息_求职招聘找工作请认准【马头商标】 | 蒸压釜-陶粒板隔墙板蒸压釜-山东鑫泰鑫智能装备有限公司 | 三效蒸发器_多效蒸发器价格_四效三效蒸发器厂家-青岛康景辉 | 非甲烷总烃分析仪|环控百科 | 钢衬四氟管道_钢衬四氟直管_聚四氟乙烯衬里管件_聚四氟乙烯衬里管道-沧州汇霖管道科技有限公司 | 大型低温冷却液循环泵-低温水槽冷阱「厂家品牌」京华仪器_京华仪器 | sfp光模块,高速万兆光模块工厂-性价比更高的光纤模块制造商-武汉恒泰通 | 通用磨耗试验机-QUV耐候试验机|久宏实业百科| 雷冲击高压发生器-水内冷直流高压发生器-串联谐振分压器-武汉特高压电力科技有限公司 | 隔离变压器-伺服变压器--输入输出电抗器-深圳市德而沃电气有限公司 | 礼堂椅厂家|佛山市艺典家具有限公司 | 武汉画册印刷厂家-企业画册印刷-画册设计印刷制作-宣传画册印刷公司 - 武汉泽雅印刷厂 | 管家婆-管家婆软件-管家婆辉煌-管家婆进销存-管家婆工贸ERP | 2025世界机器人大会_IC China_半导体展_集成电路博览会_智能制造展览网 | 无锡网站建设_小程序制作_网站设计公司_无锡网络公司_网站制作 | 【铜排折弯机,钢丝折弯成型机,汽车发泡钢丝折弯机,线材折弯机厂家,线材成型机,铁线折弯机】贝朗折弯机厂家_东莞市贝朗自动化设备有限公司 | 礼仪庆典公司,礼仪策划公司,庆典公司,演出公司,演艺公司,年会酒会,生日寿宴,动工仪式,开工仪式,奠基典礼,商务会议,竣工落成,乔迁揭牌,签约启动-东莞市开门红文化传媒有限公司 | 山东限矩型液力偶合器_液力耦合器易熔塞厂家-淄博市汇川源机械厂 | 2025福建平潭岛旅游攻略|蓝眼泪,景点,住宿攻略-趣平潭网 | 塑料薄膜_PP薄膜_聚乙烯薄膜-常州市鑫美新材料包装厂 | 山东PE给水管厂家,山东双壁波纹管,山东钢带增强波纹管,山东PE穿线管,山东PE农田灌溉管,山东MPP电力保护套管-山东德诺塑业有限公司 | 螺旋丝杆升降机-SWL蜗轮-滚珠丝杆升降机厂家-山东明泰传动机械有限公司 | 走心机厂家,数控走心机-台州博城智能科技有限公司 | 缠绕机|缠绕膜包装机|缠绕包装机-上海晏陵智能设备有限公司 | 信阳市建筑勘察设计研究院有限公司 | 有机废气处理-rto焚烧炉-催化燃烧设备-VOC冷凝回收装置-三梯环境 |