论 ArrayList如何实现线程安全

一:使用synchronized关键字

二:使用Collections.synchronizedList();

        假如你创建的代码如下:List<Map<String,Object>> data=new ArrayList<Map<String,Object>>();

        那么为了解决这个线程安全问题你可以这么使用Collections.synchronizedList(),如:

        List<Map<String,Object>> data=Collections.synchronizedList(new ArrayList<Map<String,Object>>());

       其他的都没变,使用的方法也几乎与ArrayList一样,大家可以参考下api文档;

额外说下 ArrayList与LinkedList;这两个都是接口List下的一个实现,用法都一样,但用的场所的有点不同,ArrayList适合于进行大量的随机访问的情况下使用,LinkedList适合在表中进行插入、删除时使用,二者都是非线程安全,解决方法同上(为了避免线程安全,以上采取的方法,特别是第二种,其实是非常损耗性能的)。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏我是攻城师

关于线程可见性一个“诡异”的问题

如果执行上面的代码,大多人可能觉得会死循环,因为这里没有任何的同步策略,比如synchronized,Lock,atomic,volatile等关键字,也就是说...

673
来自专栏chenssy

【死磕Java并发】-----Java内存模型之重排序

在执行程序时,为了提供性能,处理器和编译器常常会对指令进行重排序,但是不能随意重排序,不是你想怎么排序就怎么排序,它需要满足以下两个条件: 1. 在单线程环境...

1122
来自专栏JAVA高级架构

为什么要用单例模式?

682
来自专栏积累沉淀

Java设计模式(十六)----迭代子模式

迭代子模式 一、 概述 二、 结构 1.白箱聚集与外禀迭代子 2.黑箱聚集与内禀迭代子 主动...

19610
来自专栏用户3030674的专栏

约瑟夫环(排成圈)

/** * 约瑟夫环问题主要是考虑下标问题,只要解决了下标控制问题,这个题目就不难了 * 在这里我是分成了3中情况: * 1,下标小于剩余人数时:删...

562
来自专栏desperate633

深入理解数据库索引原理

转载至 https://tech.meituan.com/mysql-index.html

621
来自专栏chenssy

【死磕Java并发】—–Java内存模型之重排序

在执行程序时,为了提供性能,处理器和编译器常常会对指令进行重排序,但是不能随意重排序,不是你想怎么排序就怎么排序,它需要满足以下两个条件: 在单线程环境下不能改...

2466
来自专栏java达人

认识九大经典sql模式

小结果集,源表较少,查询条件直接针对源表 对于典型的OLTP应用,多为返回小结果集的查询。如果过滤条件直接针对源表,我们必须保证这些过滤条件高效,对于重要的字...

1948
来自专栏从流域到海域

堆和栈的区别

堆(heap)和栈(stack) 在计算机领域,堆栈是一个不容忽视的概念,堆栈是两种数据结构。堆栈都是一种数据项按序排列的数据结构,只能在一端(称为栈顶(...

1777
来自专栏码代码的陈同学

JVM 栈和栈帧

对于没有深度递归的函数来说,无需担心上篇文章中的算法。当知道正在处理数据集有限时,我会使用这种简单的基本递归形式。由于你并不知道在应用程序中会处理多少数据,因此...

6539

扫描关注云+社区