arraylist为什么线程不安全(arraylist为什么线程不安全)

2025-04-07 06:50:02 0

arraylist为什么线程不安全(arraylist为什么线程不安全)

本文目录

arraylist为什么线程不安全

首先说一下什么是线程不安全:线程安全就是多线程访问时,采用了加锁机制,当一个线程访问该类的某个数据时,进行保护,其他线程不能进行访问直到该线程读取完,其他线程才可使用。不会出现数据不一致或者数据污染。线程不安全就是不提供数据访问保护,有可能出现多个线程先后更改数据造成所得到的数据是脏数据。 如图,List接口下面有两个实现,一个是ArrayList,另外一个是vector。 从源码的角度来看,因为Vector的方法前加了,synchronized 关键字,也就是同步的意思,sun公司希望Vector是线程安全的,而希望arraylist是高效的,缺点就是另外的优点。 说下原理(百度的,很好理解): 一个 ArrayList ,在添加一个元素的时候,它可能会有两步来完成:1. 在 Items 的位置存放此元素;2. 增大 Size 的值。在单线程运行的情况下,如果 Size = 0,添加一个元素后,此元素在位置 0,而且 Size=1;而如果是在多线程情况下,比如有两个线程,线程 A 先将元素存放在位置 0。但是此时 CPU 调度线程A暂停,线程 B 得到运行的机会。线程B也向此 ArrayList 添加元素,因为此时 Size 仍然等于 0 (注意哦,我们假设的是添加一个元素是要两个步骤哦,而线程A仅仅完成了步骤1),所以线程B也将元素存放在位置0。然后线程A和线程B都继续运行,都增加 Size 的值。那好,现在我们来看看 ArrayList 的情况,元素实际上只有一个,存放在位置 0,而 Size 却等于 2。这就是“线程不安全”了。示例程序:package test;import java.util.ArrayList;import java.util.List;public class ArrayListInThread implements Runnable {List《String》 list1 = new ArrayList《String》();// not thread safe// List《String》 list1 = Collections.synchronizedList(new ArrayList《String》());// thread safepublic void run() {try {Thread.sleep((int)(Math.random() * 2));}catch (InterruptedException e) {e.printStackTrace();}list1.add(Thread.currentThread().getName());}public static void main(String args) throws InterruptedException {ThreadGroup group = new ThreadGroup(“mygroup“);ArrayListInThread t = new ArrayListInThread();for (int i = 0; i 《 10000; i++) {Thread th = new Thread(group, t, String.valueOf(i));th.start();}while (group.activeCount() 》 0) {Thread.sleep(10);}System.out.println();System.out.println(t.list1.size()); // it should be 10000 if thread safe collection is used.}}

Java中HashMap,HashSet是线程安全的吗,ArrayList是线程不安全的那如何避免其出异常

HashMap,HashSet,ArrayList都不具备线程安全。

可以用

Set s=Collections.synchronizedSet(new Hashset《...》());Map m=Collections.synchronizedMap(new HashMap《...》());List l=Collections.synchronizedList(new ArrayList《...》());

获得被同步后的版本。

也可以用ConcurrentHashMap等同步工具代替

arraylist 线程安全的吗

如果你的代码所在的进程中有多个线程在同时运行,而这些线程可能会同时运行这段代码。如果每次运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期的是一样的,就是线程安全的。比如一个ArrayList类,在添加一个元素的时候,它可能会有两步来完成:1.在Items的位置存放此元素;2.增大Size的值。在单线程运行的情况下,如果Size=0,添加一个元素后,此元素在位置0,而且Size=1;而如果是在多线程情况下,比如有两个线程,线程A先将元素存放在位置0。但是此时CPU调度线程A暂停,线程B得到运行的机会。线程B也向此ArrayList添加元素,因为此时Size仍然等于0(注意哦,我们假设的是添加一个元素是要两个步骤哦,而线程A仅仅完成了步骤1),所以线程B也将元素存放在位置0。然后线程A和线程B都继续运行,都增加Size的值。那好,现在我们来看看ArrayList的情况,元素实际上只有一个,存放在位置0,而Size却等于2。这就是“线程不安全”了,呵呵。上面是找别人的,我也来补充一下:vector线程安全ArrayList非线程安全,但却解约系统性能

arraylist是线程安全的吗

不是线程安全的,与之对应的vector类是线程安全的,基本上都是在方法上加了synchronized。最通俗的解释就是:当多个线程同时操作一个类的时候,保证不出现数据错误问题,比如现在两个线程,一个先充值100,另一个消费50,假设原有的是100,那么最终的结果应该是150,如果出现线程安全问题的话,有可能第一个线程先读取到余额100,然后充值添加100, 此时另外一个线程读的也是100,但是减去50消费,这个时候,第一个线程准备写入数据,变成了200, 而第二个线程也写入数据,变成50,这个就是线程安全问题了ArrayList是线程不安全的类,如果你想用线程安全的,可以用Vector

arraylist为什么线程不安全(arraylist为什么线程不安全)

本文编辑:admin

更多文章:


单片机编程入门教程视频(有哪些可以学习单片机的视频)

单片机编程入门教程视频(有哪些可以学习单片机的视频)

本文目录有哪些可以学习单片机的视频求80C51单片机基础视频教程有哪些可以学习单片机的视频欢迎关注“凡亿教育“官网,最近发布了一系列单片机入门的学习视频教程,非常适合初学单片机的个人,通过仿真,讲解了C51语言基础语法知识,跟LED,数码管

2025年4月2日 23:30

ddos防御(DDoS防御中的带宽容量重要吗)

ddos防御(DDoS防御中的带宽容量重要吗)

本文目录DDoS防御中的带宽容量重要吗DDOS怎么防御DDOS流量攻击防御方法有哪些被DDOS了如何防御DDoS防御中的带宽容量重要吗带宽任何时候都重要。但是对于防护DDos,还是要增加很多防御措施,光靠带宽是最终承受不住的。随着互联网的崛

2025年3月28日 20:40

pr教程视频(怎么用pr做加速视频)

pr教程视频(怎么用pr做加速视频)

本文目录怎么用pr做加速视频Pr怎么调色做视频的软件PR你有吗好用吗制作一部电影解说,需要哪些步骤和工具,视频上哪去找怎么用pr做加速视频1.把素材拖放到时间轴上,右击素材视频选择“速度/持续时间”2.改变速度百分百,修改成大于百分之一百就

2025年2月8日 21:40

python怎么读取txt文件(在python中如何调用txt文件中的某一列数据)

python怎么读取txt文件(在python中如何调用txt文件中的某一列数据)

本文目录在python中如何调用txt文件中的某一列数据如何用python将多个内容格式一致的txt文件合并成一个txt文件python怎么读取txt文件在python中如何调用txt文件中的某一列数据你说的是用python读取txt文件中

2025年3月17日 13:20

神武天尊漫画(神武天尊界王是谁)

神武天尊漫画(神武天尊界王是谁)

本文目录神武天尊界王是谁神武天尊漫画等级划分神武天尊漫画和小说一样吗神武天尊漫画里面的小黑是什么神武天尊界王是谁大成圣王镜。《神武天尊》漫画已由来自国漫的大触作者漫莱坞连载爆肝更新。天神境五层,神尊、而后的境界则细分为前中后、过度境界、经过

2025年2月25日 00:40

通配符怎么打出来(搜狗输入法,在电脑上打笔画,通配是哪个键)

通配符怎么打出来(搜狗输入法,在电脑上打笔画,通配是哪个键)

本文目录搜狗输入法,在电脑上打笔画,通配是哪个键如何写word通配符通配符是在什么条件格式下输入的A中文,β数值C英文,D文本wps表格怎么使用通配符通配符怎么打搜狗输入法,在电脑上打笔画,通配是哪个键应该是通配符。通配符是一种特殊语句,主

2025年3月24日 19:00

thinkphp框架优点(thinkphp的优点有哪些)

thinkphp框架优点(thinkphp的优点有哪些)

本文目录thinkphp的优点有哪些php中都有哪些框架,为什么要用框架呢,用框架有什么好处使用过哪些php框架.试描述其优劣点用ThinkPHP 这样的框架开发门户网站,有什么缺点thinkphp主要有什么用thinkphp相对于其他的框

2025年3月15日 18:00

udp协议和tcp协议的区别(如何通俗地解释TCP和UDP协议和HTTP、FTP、SMTP等协议之间的区别)

udp协议和tcp协议的区别(如何通俗地解释TCP和UDP协议和HTTP、FTP、SMTP等协议之间的区别)

本文目录如何通俗地解释TCP和UDP协议和HTTP、FTP、SMTP等协议之间的区别TCP协议和UDP协议有什么区别如何通俗地解释TCP和UDP协议和HTTP、FTP、SMTP等协议之间的区别不邀自来,通信方面的专业问题我来回答一下:要想通

2025年2月28日 04:30

信号 signal(signal(信号)大结局什么意思,没看懂最后来的那帮人目的又是什么)

信号 signal(signal(信号)大结局什么意思,没看懂最后来的那帮人目的又是什么)

本文目录signal(信号)大结局什么意思,没看懂最后来的那帮人目的又是什么sign和 signal区别如何评价韩剧《信号signal》的结局韩剧《信号》结局是什么意思 哥哥为什么没被救活韩剧《信号Signal》的剧情有哪些逻辑漏洞sign

2025年3月8日 15:20

源文件未编译(C++编程问题“源文件未编译”)

源文件未编译(C++编程问题“源文件未编译”)

本文目录C++编程问题“源文件未编译”用Dev-C++,一直提示“源文件未编译”c++基本程序 为什么总显示源文件未编译源代码未编译什么情况dev c++显示源文件未编译是为什么呀[100分求解]:Dev-C++编译.c文件时提示“源文件未

2025年3月1日 07:30

mysql配置超详细教程(mySQL装好需不需要在环境变量里配置,如何配置)

mysql配置超详细教程(mySQL装好需不需要在环境变量里配置,如何配置)

本文目录mySQL装好需不需要在环境变量里配置,如何配置MySQL安装配置MySQL的主从配置步骤你会那几个我和大家分享下我的几个经验mySQL装好需不需要在环境变量里配置,如何配置mySQL装好后配置环境变量的步骤如下:我们需要准备的材料

2025年3月29日 02:10

各种表格制作教程(工作表格怎么制作教程)

各种表格制作教程(工作表格怎么制作教程)

本文目录工作表格怎么制作教程表格的基本制作方法工作表格怎么制作教程带来办公软件excel表格制作教程,希望以下的分享能够帮助到您。办公软件excel表格制作教程  步骤1、首先打开Excel;  步骤2、选中想要制作表格的部分;  步骤3、

2025年4月4日 16:40

php声明数组(PHP中要使用数组的话必须先定义一个变量为array()吗)

php声明数组(PHP中要使用数组的话必须先定义一个变量为array()吗)

本文目录PHP中要使用数组的话必须先定义一个变量为array()吗php 如何定义一个数组在PHP中声明数组的方式主要有两种:一是应用array()函数声明数组,一是直接为数组元素赋值这两种区别PHP数组:什么是数组php里面怎么新建数组P

2025年4月4日 15:10

ubuntu怎么安装第三方软件(ubuntu14.04怎么安装)

ubuntu怎么安装第三方软件(ubuntu14.04怎么安装)

本文目录ubuntu14.04怎么安装ubuntu 14.04 怎么安装geant4 10.02Ubuntu的软件都安装在什么地方新手求助,各种方法安装Ubuntuubuntu14.04怎么安装方法/步骤在BIOS设置设置光驱启动(本人是用

2025年3月3日 15:30

电脑的基本操作知识有哪些(学电脑的基本知识有什么)

电脑的基本操作知识有哪些(学电脑的基本知识有什么)

本文目录学电脑的基本知识有什么笔记本电脑使用时有哪些基本常识基础电脑知识有哪些学电脑的基本知识有什么学电脑的基本知识有:1,认识电脑的基本组成设备台式机,主要由主机机箱、显示器、鼠标键盘、外接音响设备组成,上图可以清楚地看到这些设备,主机机

2025年3月4日 22:20

ae教学网站(AE和PR学习难度怎么样)

ae教学网站(AE和PR学习难度怎么样)

本文目录AE和PR学习难度怎么样我想学AE和C4D,应该如何开始学习怎么学好AEAE和PR学习难度怎么样以本人的实践,只要肯专研,学AE、PR无难事一、学习网址我要自学网【免费】网址:https://www.51zxw.net/在这个网站学

2025年2月13日 13:10

dns配置错误网页打不开(dns配置错误网页打不开)

dns配置错误网页打不开(dns配置错误网页打不开)

本文目录dns配置错误网页打不开DNS配置错误,网页打不开,这个怎么修复dns配置错误,网页打不开win7电脑dns错误连不上网怎么修复DNS配置错误,网页打不开dns错误,打不开网页DNS配置错误,网页打不开该怎么办DNS配置错误,网页打

2025年4月3日 00:20

ug二次开发入门教程(UG二次开发 与C++动态链接 三维零件库)

ug二次开发入门教程(UG二次开发 与C++动态链接 三维零件库)

本文目录UG二次开发 与C++动态链接 三维零件库ug二次开发菜单UG二次开发 与C++动态链接 三维零件库你最终是在UG中应用吗?“设置好了环境变量”指的是startup文件夹目录吗? VC错误提示信息是某些库文件找不到吗?如果都是的话,

2025年3月20日 01:00

话说为什么黑塔利亚里的cp好多人都萌ALL耀的?求aph all耀同人文,或者露中好茶菊耀,只要耀受的,别的CP不要

话说为什么黑塔利亚里的cp好多人都萌ALL耀的?求aph all耀同人文,或者露中好茶菊耀,只要耀受的,别的CP不要

本文目录话说为什么黑塔利亚里的cp好多人都萌ALL耀的求aph all耀同人文,或者露中好茶菊耀,只要耀受的,别的CP不要黑塔利亚all耀的文漫求黑塔利亚王耀中心同人文,菊耀,ALL耀等等,文越长越好,最好完结,一定是耀受的话说为什么黑塔利

2025年2月20日 09:50

liberation怎么读(lib 怎么读)

liberation怎么读(lib 怎么读)

本文目录lib 怎么读liberation怎么读lib 怎么读lib 英Nick clegg and other lib dem ministers share this analysis.尼克克莱格和其他自由民主党大臣们的观点与此相

2025年2月28日 01:50

近期文章

本站热文

harbor,port,pier的区别?谁能解释“harbour“(港口)与“pier“(码头)的区别
2025-02-22 17:40:03 浏览:18
ibatis foreach(ibatis 批量update操作)
2025-02-10 23:40:06 浏览:7
endless rain(endless rain表达什么情感)
2025-02-14 06:00:02 浏览:6
标签列表

热门搜索