线程安全的集合操作类

Posted Geek

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了线程安全的集合操作类相关的知识,希望对你有一定的参考价值。

常见的操作接口有: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());
  }
不然会导致无法确定的行为。

以上是关于线程安全的集合操作类的主要内容,如果未能解决你的问题,请参考以下文章

集合类不安全操作

尚硅谷JUC高并发编程学习笔记线程通信与集合线程安全

尚硅谷JUC高并发编程学习笔记线程通信与集合线程安全

尚硅谷JUC高并发编程学习笔记线程通信与集合线程安全

Java核心技术读书笔记10-2 阻塞队列线程安全集合类Callable与Future线程池与任务组同步框架

Java并发多线程编程——集合类线程不安全之HashMap的示例及解决方案