线程安全的集合操作类

常见的操作接口有:Map,List,Set,Vector 其最常用的实现类有:HashMap,ArrayList,LinkedList,HashSet

但是只有Vector是线程安全的,Collections实现了一个些方法可以保证常用的集合类达到线程安全:

Map: Map<Object,Object> map =  Collections.synchronizedMap(new HashMap<>());

Set:   Set<Object> set1 = Collections.synchronizedSet(new HashSet<>());

List:  List<String> list = Collections.synchronizedList(new LinkedList<>());

List<String> list = Collections.synchronizedList(new ArrayList<>());

注意 使用时必须在同步块中使用如:

Set s = Collections.synchronizedSet(new HashSet());
      ...
  synchronized(s) {
      Iterator i = s.iterator(); // Must be in the synchronized block
      while (i.hasNext())
          foo(i.next());
  }不然会导致无法确定的行为。
时间: 2024-10-16 11:08:43

线程安全的集合操作类的相关文章

Concurrent包总结——线程安全的集合操作

java中提供了丰富的集合类操作,大概可以分为无序结合Set,有序集合List和无序键值对集合Map.Java5之后又新增了队列操作集合Queue.Java1.5之后新增了线程安全的集合操作类,阻止在java.util.concurrent包中.本文仅仅探讨该包下面的线程安全的结合操作类. 先看下concurrent包下面线程安全类的类图结构: 1.CopyOnWriteArraySet类 CopyOnWriteArrayList类的底层是通过CopyOnWriteArrayList来实现的.因

java中的集合操作类(未完待续)

申明: 实习生的肤浅理解,如发现有错误之处,还望大牛们多多指点 废话 其实我写java的后台操作,我每次都会遇到一条语句:List<XXXXX> list = new ArrayList<XXXXX>(); 但是我仅仅只是了解,list这个类是一个可变长用来存储的对象实例的类,我甚至觉得这个List对象可以理解成数组,但是却又与java中咱们正常理解的数组很多的不同,比如说,他的长度可以随着需要自动增长,比如说,实例化一个List类就和咱们声明数组的时候是不一样的! 今天的实习生活

01Python内置函数_集合操作类

basestring basestring() 说明:basestring是str和unicode的超类(父类),也是抽象类, 因此不能被调用和实例化,但可以被用来判断一个对象是否为str或者unicode的实例, isinstance(obj, basestring) 等价于isinstance(obj, (str, unicode)): 版本:python2.3版本以后引入该函数,兼容python2.3以后python2各版本. 注意:python3中舍弃了该函数,所以该函数不能在pytho

Java集合操作类Collections的一些常用方法

public static void main(String[] args) { List<Integer> list = new ArrayList<Integer>(); list.add(34); list.add(55); list.add(56); list.add(89); list.add(12); list.add(23); list.add(126); System.out.println(list); //对集合进行排序 Collections.sort(lis

?集合工具类使用线程

集合工具类使用线程 1. hashmap源码解析与并发可能遇见的问题 1.HashMap中的几个重要变量 static final int DEFAULT_INITIAL_CAPACITY = 16;     //默认初始容量,必须是2的n次方 static final int MAXIMUM_CAPACITY = 1 << 30;     //最大容量,当通过构造方法传入的容量比它还大时,就用这个最大容量,必须是2的n次方 static final float DEFAULT_LOAD_FA

ASP.net如何保证EF操作类线程内唯一

说到线程内唯一,肯定会想到单例模式,但是如果多用户访问网站就会出现问题.ASP.net中有两种方法可以保证EF操作类线程内唯一(目前只会这两种,以后有好的方法再添加): 1.httpcontext(实现原理也是通过数据槽callcontext) 将EF操作类通过键值对方法保存在HttpContext.Current.Items["key"],封装成方法直接调用 2.callcontext public static DbContext CreateDbContext() { DbCon

.NET 同步与异步 之 线程安全的集合 (十一)

本随笔续接:.NET 同步与异步 之 警惕闭包(十) 无论之前说的锁.原子操作 还是 警惕闭包,都是为安全保驾护航,本篇随笔继续安全方面的主题:线程安全的集合. 先看一下命名空间:System.Collections.Concurrent,常用的类型有(均为泛型):BlockingCollection<T>.ConcurrentBag<T>.ConcurrentDictionary<TKey, TValue>.ConcurrentQueue<T>.Concu

黑马程序员-集合工具类和1.5新特性

集合框架的工具类:collecttions Collections 的方法全是静态的 List没有排序功能,所以java定义了Collections工具类. 比较器无法传给list,只能传给Set.但是集合工具类有此方法 1.排序: comparable:    sort(List<T> list) 根据元素的自然顺序 对指定列表按升序进行排序. comparator:    sort(List<T> list, Comparator<? super T> c) 根据比

Map集合以及Collections集合工具类

一.Collection集合主要特点与Map集合的区别 Collection: 单列集合:有两个子接口 List集合元素是有序的,可以重复的 Set集合元素是无序的,不可以重复 List:元素可重复,有序 ArrayList:底层数据结构是数组,查询快,增删慢,不同步,线程不安全,效率高:没有特殊说明一般使用ArrayList集合: Vector:底层数据结构是数组,查询快,增删慢,同步,线程安全,效率低:有一个elements()特有迭代方法: LinkedList:底层数据结构是链表,查询慢