精华内容
下载资源
问答
  • 并发集合 VS 同步集合
    千次阅读
    2018-02-28 10:51:55

    并发集合:
    ConcurrentHashMap
    CopyOnWriteArrayList
    CopyOnWriteArraySet

    同步集合:
    HashTable
    Vector
    同步集合器Collections.synchronizedList(list)、Collections.synchronizedSet(set)、Collections.synchronizedMap(map)

    二者都支持线程安全,区别主要体现在实现线程安全的方式,因此在性能和可扩展性上有明显不同!!!
    同步集合是把整个集合锁起来,所以性能较差;
    并发集合是通过锁剥离、COW等技术使得多个线程可以同时访问集合,所以性能很好。

    更多相关内容
  • Java多线程之同步集合和并发集合 另一个介绍 hashmap 是非同步的,故在多线程中是线程不安全的,不过也可以使用 同步类来进行包装: 包装类Collections.synchronizedMap()和Collections.synchronizedList()提供了...

    java多线程中并发集合和同步集合有哪些?

    Java多线程之同步集合和并发集合
    另一个介绍

    hashmap 是非同步的,故在多线程中是线程不安全的,不过也可以使用 同步类来进行包装:

    包装类Collections.synchronizedMap()和Collections.synchronizedList()提供了一个基本的有条件的线程安全的Map和List实现。

    ConcurrentHashMap和Hashtable之间的区别
    那么Hashtable和ConcurrentHashMap之间的区别是什么,可以在多线程环境中使用,但一旦Hashtable的大小变得相当大的性能降低,因为迭代它必须被锁定更长的时间。

    由于ConcurrentHashMap引入了分段的概念,所以它只有一部分被锁定才能提供线程安全性.

    总而言之,ConcurrentHashMap仅锁定Map的某些部分,而Hashtable在执行迭代时锁定完整映射。

    ConcurrentHashMap和Collections.synchronizedMap之间的区别
    ConcurrentHashMap旨在实现并发性能,提高性能,而通过使用synchronized Map应用包装器,可以同步自然不同步的HashMap。

    以下是ConcurrentHashMap和Java中的同步映射之间的一些常见区别
    ConcurrentHashMap 不允许空值或空值同步,但是HashMap允许一个空键。

    Synchronized vs Concurrent Collections
    不管是同步集合还是并发集合他们都支持线程安全,他们之间主要的区别体现在性能和可扩展性,还有他们如何实现的线程安全。同步HashMap, Hashtable, HashSet, Vector, ArrayList 相比他们并发的实现(比如:ConcurrentHashMap, CopyOnWriteArrayList, CopyOnWriteHashSet)会慢得多。造成如此慢的主要原因是锁, 同步集合会把整个Map或List锁起来,而并发集合不会。并发集合实现线程安全是通过使用先进的和成熟的技术像锁剥离。比如ConcurrentHashMap 会把整个Map 划分成几个片段,只对相关的几个片段上锁,同时允许多线程访问其他未上锁的片段。

    同样的,CopyOnWriteArrayList 允许多个线程以非同步的方式读,当有线程写的时候它会将整个List复制一个副本给它。

    如果在读多写少这种对并发集合有利的条件下使用并发集合,这会比使用同步集合更具有可伸缩性。

    顺便说一下,集合类是Java API的核心,所以我觉得明智而审慎地使用它们是一门艺术。这是我的个人经验,我通过使用ArrayList替换遗留代码里使用的Vector来提高性能。JDK 1.5引入一些很好的并发集合能高效地开发高容量,低延迟的Java应用程序。

    Synchronized Collections vs Concurrent Collections in Java
    同步集合类,Hashtable 和 Vector 还有同步集合包装类,Collections.synchronizedMap()和Collections.synchronizedList() 提供了一个基本的有条件的线程安全的Map和List的实现。

    所以Hashtable和ConcurrentHashMap的区别是什么,他们都可以在多线程环境中使用,但一旦Hashtable 的大小变得相当大的时候,其性能会降低,因为迭代的时候会被长时间锁定。

    然而有一些因素导致他们不适合在高并发应用程序中使用,最主要的原因是在他们的‘集合范围’的锁是程序可伸缩性的一个阻碍。它往往成为必须在相当长一段时间内对集合加锁以防止在迭代期间出现ConcurrentModificationException。

    ConcurrentHashMap和CopyOnWriteArrayList不一定在所有地方都是有用的,一般情况下你只需要使用HashMap或ArrayList。

    因为ConcurrentHashMap 引入了分片的概念,所以无论集合有多大,她都只对特定的片段进行加锁以保障线程安全,其他的读线程仍然可以访问map而不用等待正在访问的线程遍历结束。

    java.util.concurrent包中包含的并发集合类如下:

    ConcurrentHashMap

    CopyOnWriteArrayList

    CopyOnWriteArraySet

    展开全文
  • java中的同步集合并发集合

    千次阅读 2018-08-26 17:01:14
    同步集合可以简单地理解为通过synchronized来实现同步的集合。如果有多个线程调用同步集合的方法,它们将会串行执行。 arrayListvector、stack: 1. Vector是线程安全的,源码中有很多的synchronized可以看出,...

    同步集合可以简单地理解为通过synchronized来实现同步的集合。如果有多个线程调用同步集合的方法,它们将会串行执行。
    arrayList和vector、stack:
    1. Vector是线程安全的,源码中有很多的synchronized可以看出,而ArrayList不是。导致Vector效率无法和ArrayList相比
    2. ArrayList和Vector都采用线性连续存储空间,当存储空间不足的时候,ArrayList默认增加为原来的50%,Vector默认增加为原来的一倍
    3. Vector可以设置capacityIncrement,而ArrayList不可以,从字面理解就是capacity容量,Increment增加,容量增长的参数
    4. Stack是继承于Vector,基于动态数组实现的一个线程安全的栈
    5. arrayList、vector、Stack的共性特点:随机访问速度快,插入和移除性能较差(这是数组的特点,三者的底层均为数组实现)

    HashMap和Hashtable:
    1. HashMap是非synchronized的,而Hashtable是synchronized的。这说明Hashtable是线程安全的,而且多个线程可以共享一个Hashtable
    2. 由于Hashtable是线程安全的,也是synchronized的,所以在单线程环境下比HashMap要慢
    3. HashMap可以存在null的键值(key)和值(value),
    但是Hashtable是不可以的

    Collections:
    Collections是为集合提供各种方便操作的工具类,通过它,可以实现集合排序、查找、替换、同步控制、设置不可变集合

    Collections.synchronizedCollection(Collection<T>t)
    Collections.synchronizedList(List<T>list)
    Collections.synchronizedMap(Map<K, V>map)
    Collections.synchronizedSet(Set<T> t)

    上面几个方法是Collections工具类将集合变为同步集合,从而解决集合的线程安全问题。

    同步集合在单线程的环境下能够保证线程安全,但是通过synchronized同步方法将访问操作串行化,导致并发环境下效率低下。而且同步集合在多线程环境下的复合操作(迭代、条件运算如没有则添加等)是非线程安全,需要客户端代码来实现加锁。

    并发集合 是jdk5.0重要的特性,增加了并发包java.util.concurrent.*。Java内存模型、volatile变量及AbstractQueuedSynchronizer(简称AQS同步器),是并发包众多实现的基础。

    常见的并发集合:
    ConcurrentHashMap:线程安全的HashMap的实现
    CopyOnWriteArrayList:线程安全且在读操作时无锁的ArrayList
    CopyOnWriteArraySet:基于CopyOnWriteArrayList,不添加重复元素
    ArrayBlockingQueue:基于数组、先进先出、线程安全,可实现指定时间的阻塞读写,并且容量可以限制
    LinkedBlockingQueue:基于链表实现,读写各用一把锁,在高并发读写操作都多的情况下,性能优于ArrayBlockingQueue

    CopyOnWrite集合即写时复制的集合
    通俗的理解是当我们往一个集合添加元素的时候,不直接往当前集合添加,而是先将当前集合进行Copy,复制出一个新的集合,然后新的集合里添加元素,添加完元素之后,再将原集合的引用指向新的集合。这样做的好处是我们可以对CopyOnWrite集合进行并发的读,而不需要加锁,因为当前集合不会添加任何元素。所以CopyOnWrite集合也是一种读写分离的思想,读和写不同的集合。

    展开全文
  • java多线程中并发集合和同步集合有哪些? hashmap 是非同步的,故在多线程中是线程不安全的,不过也可以使用 同步类来进行包装: 包装类Collections.synchronizedMap()和Collections.synchronizedList()提供了...

    java多线程中并发集合和同步集合有哪些?

     

       hashmap 是非同步的,故在多线程中是线程不安全的,不过也可以使用 同步类来进行包装:

           包装类Collections.synchronizedMap()和Collections.synchronizedList()提供了一个基本的有条件的线程安全的Map和List实现。

       

    ConcurrentHashMap和Hashtable之间的区别

    那么Hashtable和ConcurrentHashMap之间的区别是什么,可以在多线程环境中使用,但一旦Hashtable的大小变得相当大的性能降低,因为迭代它必须被锁定更长的时间。

    由于ConcurrentHashMap引入了分段的概念,所以它只有一部分被锁定才能提供线程安全性. 

    总而言之,ConcurrentHashMap仅锁定Map的某些部分,而Hashtable在执行迭代时锁定完整映射。 
     

    ConcurrentHashMap和Collections.synchronizedMap之间的区别

    ConcurrentHashMap旨在实现并发性能,提高性能,而通过使用synchronized Map应用包装器,可以同步自然不同步的HashMap。
     
    以下是ConcurrentHashMap和Java中的同步映射之间的一些常见区别
        ConcurrentHashMap  不允许空值或空值同步,但是HashMap允许一个空键。
     
     

    Synchronized vs Concurrent Collections

    不管是同步集合还是并发集合他们都支持线程安全,他们之间主要的区别体现在性能可扩展性,还有他们如何实现的线程安全。同步HashMap, Hashtable, HashSet, Vector, ArrayList 相比他们并发的实现(比如:ConcurrentHashMap, CopyOnWriteArrayList, CopyOnWriteHashSet)会慢得多。造成如此慢的主要原因是, 同步集合会把整个Map或List锁起来,而并发集合不会。并发集合实现线程安全是通过使用先进的和成熟的技术像锁剥离。比如ConcurrentHashMap 会把整个Map 划分成几个片段,只对相关的几个片段上锁,同时允许多线程访问其他未上锁的片段。

    同样的,CopyOnWriteArrayList 允许多个线程以非同步的方式读,当有线程写的时候它会将整个List复制一个副本给它。

    如果在读多写少这种对并发集合有利的条件下使用并发集合,这会比使用同步集合更具有可伸缩性。

    顺便说一下,集合类是Java API的核心,所以我觉得明智而审慎地使用它们是一门艺术。这是我的个人经验,我通过使用ArrayList替换遗留代码里使用的Vector来提高性能。JDK 1.5引入一些很好的并发集合能高效地开发高容量,低延迟的Java应用程序。

    Synchronized Collections vs Concurrent Collections in Java

    同步集合类,Hashtable 和 Vector 还有同步集合包装类,Collections.synchronizedMap()和Collections.synchronizedList() 提供了一个基本的有条件的线程安全的Map和List的实现。

    所以Hashtable和ConcurrentHashMap的区别是什么,他们都可以在多线程环境中使用,但一旦Hashtable 的大小变得相当大的时候,其性能会降低,因为迭代的时候会被长时间锁定。

    然而有一些因素导致他们不适合在高并发应用程序中使用,最主要的原因是在他们的‘集合范围’的锁是程序可伸缩性的一个阻碍。它往往成为必须在相当长一段时间内对集合加锁以防止在迭代期间出现ConcurrentModificationException。

     

    ConcurrentHashMap和CopyOnWriteArrayList不一定在所有地方都是有用的,一般情况下你只需要使用HashMap或ArrayList。

    因为ConcurrentHashMap 引入了分片的概念,所以无论集合有多大,她都只对特定的片段进行加锁以保障线程安全,其他的读线程仍然可以访问map而不用等待正在访问的线程遍历结束。

     

    java.util.concurrent包中包含的并发集合类如下:

       ConcurrentHashMap

       CopyOnWriteArrayList

       CopyOnWriteArraySet

    展开全文
  • 同步集合并发集合都为多线程并发提供了合适的线程安全的集合,不过并发集合的可扩展性更高。 在Java1.5之前程序员们只有同步集合来用且在多线程并发的时候会导致争用,阻碍了系统的扩展性。 Java5介绍了并发...
  • Java多线程之同步集合和并发集合 不管是同步集合还是并发集合他们都支持线程安全,他们之间主要的区别体现在性能和可扩展性,还有他们如何实现的线程安全。 同步集合类 Hashtable Vector 同步集合包装类,...
  • 在Java中,有普通集合、同步的集合(即线程安全的集合)、并发集合并发集合常见的有ConcurrentHashMap、ConcurrentLinkedQueue、ConcurrentLinkedDeque等。并发集合位于java.util.concurrent包下,是在JDK1.5...
  • Java并发集合

    千次阅读 2021-02-27 16:49:06
    Java并发集合并发集合实现1JDK1.5的出现,对于集合并发编程来说,java developer有了更多的选择。不过,在JDK1.5之前,Java也还是提供了一些解决方案。(1)最为简单直接的就是在程序中我们自己对共享变量进行加锁。...
  • 在 java 中有普通集合、同步(线程安全)的集合、并发集合并发集合常见的有 ConcurrentHashMap、ConcurrentLinkedQueue、ConcurrentLinkedDeque 等。并发集合位于java.util.concurrent 包下,是 jdk1.5之后才有的...
  • 同步集合并发集合都为多线程并发提供了合适的线程安全的集合,不过并发集合的可扩展性更高。 在Java1.5之前程序员们只有同步集合来用且在多线程并发的时候会导致争用,阻碍了系统的扩展性。 Java5介绍了并发...
  • 锁定方法非锁定方法可以同步进行 synchronized优化:代码 部分 synchronized底层实现: 早期JDK中,synchronized是重量级的,即需要调用操作系统(OS)来申请锁。 后来改进了,有了锁的升级: Java虚拟机中并没有...
  • 主要介绍了Java同步容器和并发容器详解,容器是Java基础类库中使用频率最高的一部分,Java集合包中提供了大量的容器类来帮组我们简化开发,下面小编大家来一起学习下吧
  • Java多线程之同步集合和并发集合   不管是同步集合还是并发集合他们都支持线程安全,他们之间主要的区别体现在性能和可扩展性,还有他们如何实现的线程安全。       同步集合类 Hashtable Vector 同步...
  • 并发集合和普通集合如何区别? ConcurrentHashMap 线程安全
  • 并发集合与普通集合的区别

    千次阅读 2018-07-12 20:34:24
    在Java中,有普通集合、同步的集合(即线程安全的集合)、并发集合并发集合常见的有ConcurrentHashMap、ConcurrentLinkedQueue、ConcurrentLinkedDeque等。并发集合位于java.util.concurrent包下,是在JDK1.5...
  • java并非编程,合集(各种锁、并发集合、障碍器、线程同步
  • “性能测试”一般思路是“多用户并发测试”,但真正的并发其实是不存在的,为了更真实、更接近的实现并发,在需要压力的地方设置集合点,等所有用户都到位的时候,然后一起访问,从而实现并发。 举个例子,要测试...
  • ArrayListHashMap是非并发集合,迭代时不能进行修改删除操作。于是1.5之后出现了并发了集合 并发集合类主要有: ConcurrentHashMap; ConcurrentSkipListMap; ConCurrentSkipListSet; CopyOnWriteArrayList; ...
  • Synchronized vs Concurrent Collections不管是同步集合还是并发集合他们都支持线程安全,他们之间主要的区别体现在性能可扩展性,还有他们如何实现的线程安全。同步HashMap, Hashtable, HashSet, Vector, ...
  • HashMap原理,Hash冲突,并发集合,线程安全集合及实现原理
  • 为了方便编写出线程安全的程序,Java里面提供了一些线程安全类和并发工具...  注意Collection和Map是一个顶层接口,而List、Set、Queue则继承了Collection接口,分别代表数组、集合和队列这三大类容器。  像ArrayLis
  • 转载出处:... 同步集合可以简单地理解为通过synchronized来实现同步的集合。如果有多个线程调用同步集合的方法,它们将会串行执行。 arrayListvector、stack Vecto...
  • 在Java中,有普通集合、同步的集合(即线程安全的集合)、并发集合并发集合常见的有ConcurrentHashMap、ConcurrentLinkedQueue、ConcurrentLinkedDeque等。并发集合位于java.util.concurrent包下,是在JDK1.5...
  • 本文介绍了在Java类库中出现的第一个关联的...Hashtable的后继者HashMap是作为JDK1.2中的集合框架的一部分出现的,它通过提供一个不同步的基类一个同步的包装器Collections.synchronizedMap,解决了线程安全性问题。
  • 由于私人原因,暂时没有太多时间用于并发集合类型的实例学习上面。 所以从本章开始,后续并发集合类型相关文章都是转载文章,特此说明。 这些转载文章的叙述角度各不相同,不过不影响我们通过这些文章对并发集合有...
  • 实际上,Java 的集合库包含了线程安全集合和非线程安全集合,可以说 Java 的线程安全集合就是按照上一篇的步骤来实现的。 这篇主要简单介绍 Java 集合库。它包含的集合可以区分为: 非同步集合 同步集合 并发集合 ...
  • 在 java 中有普通集合、同步(线程安全)的集合、并发集合。 普通集合通常性能最高,但是不保证多线程的安全性并发的可靠性。 线程安全集合仅仅是给集合添加了 synchronized 同步锁,严重牺牲了性

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 154,025
精华内容 61,610
关键字:

并发集合和同步集合