如何保证ArrayList线程安全

一、继承Arraylist,然后重写或按需求编写自己的方法,这些方法要写成synchronized,在这些synchronized的方法中调用ArrayList的方法。

二:使用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适合在表中进行插入、删除时使用,二者都是非线程安全,解决方法同上(为了避免线程安全,以上采取的方法,特别是第二种,其实是非常损耗性能的)。

时间: 2024-10-17 05:27:43

如何保证ArrayList线程安全的相关文章

集合框架,ArrayList和Vector的区别,让arrayList线程安全的几种方案

boolean add(E e) 将指定的元素添加到此列表的尾部. void add(int index, E element) 将指定的元素插入此列表中的指定位置. boolean addAll(Collection<? extends E> c) 按照指定 collection 的迭代器所返回的元素顺序,将该 collection 中的所有元素添加到此列表的 尾部. boolean addAll(int index, Collection<? extends E> c) 从指定

ArrayList线程不安全?

ArrayList是线程不安全的,轻量级的.如何使ArrayList线程安全? 1.继承Arraylist,然后重写或按需求编写自己的方法,这些方法要写成synchronized,在这些synchronized的方法中调用ArrayList的方法. 2.List list = Collections.synchronizedList(new ArrayList());

关于ArrayList线程安全解决方案

一:使用synchronized关键字 二:使用Collections.synchronizedList();使用方法如下: 假如你创建的代码如下:List<Map<String,Object>> data=new ArrayList<Map<String,Object>>(); 那么为了解决这个线程安全问题你可以这么使用Collections.synchronizedList(),如: List<Map<String,Object>>

C# 如何保证对象线程内唯一:数据槽(CallContext)

如果说,一个对象保证全局唯一,大家肯定会想到一个经典的设计模式:单例模式,如果要使用的对象必须是线程内唯一的呢? 数据槽:CallContext,ok看下msdn对callcontent的解释. CallContext 是类似于方法调用的线程本地存储区的专用集合对象,并提供对每个逻辑执行线程都唯一的数据槽.数据槽不在其他逻辑线程上的调用上下文之间共享.当 CallContext 沿执行代码路径往返传播并且由该路径中的各个对象检查时,可将对象添加到其中. 也就是说,当前线程对对象进行储存到线程本地

Android怎样保证一个线程最多仅仅能有一个Looper?

1. 怎样创建Looper? Looper的构造方法为private,所以不能直接使用其构造方法创建. private Looper(boolean quitAllowed) { mQueue = new MessageQueue(quitAllowed); mThread = Thread.currentThread(); } 要想在当前线程创建Looper.需使用Looper的prepare方法,Looper.prepare(). 假设如今要我们来实现Looper.prepare()这种方法

如何使ArrayList线程安全

Collections.synchronizedList方法做的事情也挺简单,生成一个静态内部类包装List原有的方法,并加上锁控制,有些方法只是单纯的加锁控制,有的方法则只是在需要同步的地方加锁控制从而增加性能

Java集合框架---重构设计

面向接口编程: 接口类型 变量 =new 实现类(); List  list=new ArrayList(); --------------------------------------- List实现类的特点与性能分析 -------------------------------------- 三者共同的特点和遵循的规范: 1):允许元素重复: 2):记录元素的先后添加顺序 -------------------------------------- vector类: 底层才有数组结构算法

面试题: !=!=未看4

以下面试题是针对最近热门Java面试题汇总,仅供参考! 一.自我介绍,以及介绍最近一个项目 简单介绍一下自己,姓名,籍贯,毕业以来工作多少年,在哪些公司工作过.一语带过即可.然后介绍一下最近做的一个项目,包含整体架构设计,涉及前后端框架,缓存,中间件以及数据库等. 二.String特性.StringBuffer 和 StringBuilder 区别 String a = "str"; String b = new String("str"):问 a == b , a

单列集合List

List的常用子类 如果要执行大量的增删操作选择LinkedList,如果只是查询的话用ArrayList ArrayList集合 有序存储,继承了List的特性,平时常用来查询,遍历数据 底层是数组结构,所以增删慢,查询快,效率高意味着线程不安全 LinkedList集合 有序存储,继承了List的特性 底层是链表结构,所以增删快,查询慢,同样的效率高,但是线程不安全 LinkedList是一个双向链表 特有方法 public void addFirst(E e) :将指定元素插入此列表的开头