问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

arraylist线程安全吗(java中list线程为何不安全)

发布网友 发布时间:2024-09-30 21:29

我来回答

1个回答

热心网友 时间:2024-11-11 14:05

  首先说一下什么是线程不安全:线程安全就是多线程访问时,采用了加锁机制,当一个线程访问该类的某个数据时,进行保护,其他线程不能进行访问直到该线程读取完,其他线程才可使用。不会出现数据不一致或者数据污染。线程不安全就是不提供数据访问保护,有可能出现多个线程先后更改数据造成所得到的数据是脏数据。
   如图,List接口下面有两个实现,一个是ArrayList,另外一个是vector。 从源码的角度来看,因为Vector的方法前加了,synchronized 关键字,也就是同步的意思,sun公司希望Vector是线程安全的,而希望arraylist是高效的,缺点就是另外的优点。
   说下原理(百度的,很好理解): 一个 ArrayList ,在添加一个元素的时候,它可能会有两步来完成:1。 在 Items[Size] 的位置存放此元素;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。这就是“线程不安全”了。示例程序:。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
我梦见一条蛇,谁能解梦? ...战地3港版,多人联网要求ea账号,于是用电脑注册了一个,用ps3登入提... 谁给推荐几个不花钱的好玩的游戏啊!无聊中... 天气潮汐预报app哪个好用 涨潮有什么软件 墨迹天气怎么看潮汐时间 墨迹天气潮汐预报设置教程 哪种天气预报能看潮汐 小米手机开发者模式在哪里关闭?小米手机开发者模式 上海行迈企业管理咨询有限公司讲师介绍 赵继红培训课程 宽让的意思 宽饶的近义词和反义词是什么_宽饶是什么意思? 畸形“饭圈”问题向体育、电竞等领域蔓延什么是饭圈言行? 宽饶的近义词 外阴白斑有没有30多年从来不痒不痛的,还是胎记 在iPhone上怎么抠图换背景? 狗狗流黄鼻涕,还有点红色的,不爱吃东西,精神不太好,怎么办呢?_百度知... 狗狗不吃东西,吐白色粘稠物,鼻子里分泌褐色鼻涕,没精神,鼻子呼吸困难... 亚文化是非主流的一种吗 给妈妈过80岁生日有哪些礼物可以选择? hpz800主板能不能用索泰rtx2070显卡? 给老人买什么生日礼物最好啊? 给80岁老人过生日,都有哪些礼物选择? 穿刺是什么意思,有什么用? 孤家寡人猜一猜十二生肖是什么 穿刺的谐音是什么意思呀 穿刺的谐音是什么意思? 5个多月宝宝会认人吗 三个月孩子认人怎么办 小孩几个月开始认人 怎么把U盘里歌曲删除 LinkedList(详细讲解) 油画和国画哪个好 膝盖后面窝疼是什么原因 国画和油画哪个好 腿弯曲膝盖后面疼是怎么回事 ...后补充还是全部练完以后补充啊 我每次力量训练后还跑四十分钟... 一天跑四十分钟 跑步之前喝蛋白粉有什么用 乳清蛋白粉 小猫喝蜂蜜水的注意事项有哪些(小猫喝蜂蜜水的4大禁忌) 江苏属于哪个市的 健身前喝蛋白粉还是健身后喝? 猫能不能吃黑蜂蜜水 水里加什么猫才会爱喝水 猫喂蜂蜜水要注意什么 什么树叶人吃了会生病 c盘太小无法升级win10怎么办? 中国舞蹈家协会授予王一博中国顶尖舞者推广大使身份,对此你怎么看?_百 ... ...的动态在朋友圈里不显示只有单独点开他的相册才能显示什么原因?_百度... 小喇叭广播节目 美的电磁炉通电后响一下和所有灯亮一下后无显示,按键也无反映,拔掉热敏...