Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >ArrayList在Java多线程中的应用

ArrayList在Java多线程中的应用

作者头像
用户2146693
发布于 2019-08-08 03:46:27
发布于 2019-08-08 03:46:27
1.5K0
举报
文章被收录于专栏:架构师进阶架构师进阶

ArrayList是非线程安全的。

问题描述

开发中,存在这样的业务逻辑,类似倒金字塔结构,下层数据需要基于上层的数据进行逻辑计算。设计思路是:定义一个全局变量upLayerList,来保存上一层的数据。每一层计算仅需要知道upLayerList就可以,不用关心上一层数据怎么获取。当前层计算完毕后,把结果赋值给upLayerList,留给下一层使用。

问题重现

模拟业务逻辑实现:

实现多线程:

正常的输出:

Runner1 : [1, 2, 3] Runner2 : [4, 5, 6]

实际输出:

线程1和线程2修改了彼此的list。

解决方案1

使用同步关键字synchronized

线程1和线程2交叉运行输出:

解决方案2

传值,每一层都传upLayerList。

实际测试结果:

其他解决方案

定义变量:uplayerList = Collections.synchronizedList(new ArrayList<>());,uplayerList 是线程安全的,但是后面对uplayerList 的操作不是线程安全的。需要对操作加同步关键字synchronized

扩展

ArrayList和Vector以及synchronizedList

以上是针对实际问题的2种解决方案,欢迎留言指正。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Java多线程八股(三)一>多线程环境使用哈希表和ArrayList
2. 套个壳使用Collections.synchronizedList(new ArrayList)  就类似于上面的HashTable这些,但是不推荐使用因为使用加锁是有代价的(性能开销等等) synchronizedList 是标准库提供的一个基于 synchronized 进行线程同步的 List. synchronizedList的关键操作方法上都带有 synchronized 
用户11305962
2024/11/27
890
Java多线程八股(三)一>多线程环境使用哈希表和ArrayList
Java中ArrayList的同步方法
arrayList 的实现是默认不同步的。这意味着如果一个线程在结构上修改它并且多个线程同时访问它,它必须在外部同步。结构修改意味着从列表中添加或删除元素或显式调整后备数组的大小。改变现有元素的值不是结构修改。
小锋学长生活大爆炸
2021/09/26
1.9K0
Java一分钟之-并发编程:线程安全的集合类
在多线程环境下,共享数据的访问可能导致数据不一致性和其他并发问题。Java提供了线程安全的集合类来解决这些问题,确保在并发环境中数据的正确性。以下是一些关键点和示例代码。
Jimaks
2024/05/28
1280
Java一分钟之-并发编程:线程安全的集合类
论 ArrayList如何实现线程安全
假如你创建的代码如下:List<Map<String,Object>> data=new ArrayList<Map<String,Object>>();
房上的猫
2018/04/03
1.1K6
Java多线程概念[同步容器,并发容器](二)
1.Vector和ArrayList都实现了List接口,Vector对数组的操作和ArrayList都一样,区别在于Vector在可能出现线程安全的方法上都加了synchronized关键字修饰.
开源日记
2021/01/01
7940
Java多线程详解2
Java多线程详解 Java线程:线程的同步与锁 一、同步问题提出 线程的同步是为了防止多个线程访问一个数据对象时,对数据造成的破坏。 例如:两个线程ThreadA、ThreadB都操作同一个对象Foo对象,并修改Foo对象上的数据。 publicclass Foo { privateint x = 100; publicint getX() { return x; } publicint fix(int y) { x = x - y; return x;
Java帮帮
2018/03/15
7320
Java 面试必考,Vector、ArrayList、LinkedList有何区别?
今天,阿七继续带大家来看一道经典面试题。对比 Vector、ArrayList、LinkedList 有何区别?你应该使用什么线程安全的集合框架?
伍六七AI编程
2023/12/07
1640
Java 面试必考,Vector、ArrayList、LinkedList有何区别?
Java并发BUG基础篇
线程主要通过共享对相同对象的访问进行通信。因此,在对象变化时读取可能会产生意外的结果。同样,同时更改对象可能会使它处于不一致的状态。
FunTester
2020/02/17
4460
【从刷面试题到构建知识体系】Java底层-synchronized锁-1
在技术论坛中,经常看到一种言论:面试造火箭,干活拧螺丝。我们平时写的大部分代码的确是CRDU,再提一个层次,也无非就是揉进去复杂一些的业务逻辑,把一堆的CRDU组合起来。
小端
2019/10/16
3360
【从刷面试题到构建知识体系】Java底层-synchronized锁-1
# 全网最细 | 21张图带你领略集合的线程不安全
集合框架有Map和Collection两大类,Collection下面有List、Set、Queue。List下面有ArrayList、Vector、LinkedList。如下图所示:
悟空聊架构
2020/09/01
4930
Java集合之Vector源码分析
Vector与ArrayLIst类似, 内部同样维护一个数组, Vector是线程安全的. 方法与ArrayList大体一致, 只是加上 synchronized 关键字, 保证线程安全, 下面就不具体分析源码了, 具体可以查看ArrayList中的源码分析.
烟草的香味
2019/07/25
5960
并发业务中,线程安全与否很重要,来看看你懂多少?
链接: https://juejin.im/post/5b7d68f66fb9a019d80a9002
Java小咖秀
2020/07/15
3870
并发业务中,线程安全与否很重要,来看看你懂多少?
Java多线程:从基本概念到避坑指南
多核的机器,现在已经非常常见了。即使是一块手机,也都配备了强劲的多核处理器。通过多进程和多线程的手段,就可以让多个CPU同时工作,来加快任务的执行。
xjjdog
2021/10/12
6000
集合不安全之 ArrayList及其三种解决方案【CopyOnWriteArrayList 、synchronizedList、Vector 】
我们在高并发的场景下,难免会出现并发问题,特别是ArrayList这种常用的集合。这种事情还是要考虑的,今天就带大家一起看一下ArrayList为什么不安全?有哪些解决方案呢?
掉发的小王
2022/07/11
2440
集合不安全之 ArrayList及其三种解决方案【CopyOnWriteArrayList 、synchronizedList、Vector 】
什么时候线程不安全?怎样做到线程安全?怎么扩展线程安全的类?
当多个线程去访问某个类时,如果类会表现出我们预期出现的行为,那么可以称这个类是线程安全的。
爬蜥
2019/07/09
1.1K0
全网最细 | 21张图带你领略集合的线程不安全
集合框架有Map和Collection两大类,Collection下面有List、Set、Queue。List下面有ArrayList、Vector、LinkedList。如下图所示:
悟空聊架构
2022/05/13
1900
全网最细 | 21张图带你领略集合的线程不安全
Java 中的常见并发陷阱-Java快速进阶教程
在本教程中,我们将看到 Java 中一些最常见的并发问题。我们还将学习如何避免它们及其主要原因。
jack.yang
2025/04/05
470
线程安全的集合类(ConcurrentHashMap面试超高频考点)
🎉使用Collections.synchronizedList(new ArrayList); synchronizedList是标准库提供的一个基于synchronized进行线程同步的List,synchronizedList的关键操作上都带有synchronized来满足线程安全
终有救赎
2023/10/16
1450
线程安全的集合类(ConcurrentHashMap面试超高频考点)
CopyOnWriteArrayList 是如何保证线程安全的?
在上一篇文章里,我们聊到了ArrayList 的线程安全问题,其中提到了 CopyOnWriteArrayList 的解决方法。那么 CopyOnWriteArrayList 是如何解决线程安全问题的,背后的设计思想是什么,今天我们就围绕这些问题展开。
用户9995743
2022/12/22
1.1K0
CopyOnWriteArrayList 是如何保证线程安全的?
Java多线程参考手册 博客分类: 经典文章转载
http://blog.csdn.net/ring0hx/article/details/6858582
chroya
2018/10/31
4410
推荐阅读
相关推荐
Java多线程八股(三)一>多线程环境使用哈希表和ArrayList
更多 >
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文