同步集合与并发集合都为多线程和并发提供了合适的线程安全的集合,不过并发集合的可扩展性更高。

在Java1.5之前程序员们只有同步集合来用且在多线程并发的时候会导致争用,阻碍了系统的扩展性。Java5介绍了并发集合像ConcurrentHashMap,不仅提供线程安全还用锁分离和内部分区等现代技术提高了可扩展性。
不管是同步集合还是并发集合他们都支持线程安全,他们之间主要的区别体现在性能和可扩展性,还有他们如何实现的线程安全上。
同步HashMap, Hashtable, HashSet, Vector, ArrayList 相比他们并发的实现(ConcurrentHashMap, CopyOnWriteArrayList, CopyOnWriteHashSet)会慢得多。造成如此慢的主要原因是锁, 同步集合会把整个Map或List锁起来,而并发集合不会。并发集合实现线程安全是通过使用先进的和成熟的技术像锁剥离。
比如ConcurrentHashMap 会把整个Map 划分成几个片段,只对相关的几个片段上锁,同时允许多线程访问其他未上锁的片段。
同样的,CopyOnWriteArrayList 允许多个线程以非同步的方式读,当有线程写的时候它会将整个List复制一个副本给它。
如果在读多写少这种对并发集合有利的条件下使用并发集合,这会比使用同步集合更具有可伸缩性。

Java中的同步集合与并发集合有什么区别?相关推荐

  1. Java中线程同步锁和互斥锁有啥区别?看完你还是一脸懵逼?

    首先不要钻概念牛角尖,这样没意义. 也许java语法层面包装成了sycnchronized或者明确的XXXLock,但是底层都是一样的.无非就是哪种写起来方便而已. 锁就是锁而已,避免多个线程对同一个 ...

  2. java中list,set,map集合的区别,及面试要点

    Map集合:链接: Map集合的五种遍历方式及Treemap方法 Set集合:链接: Java中遍历Set集合的三种方法 TreeSet集合:链接: Java深入了解TreeSet,和迭代器遍历方法 ...

  3. JAVA中线程同步的方法(7种)汇总

    JAVA中线程同步的方法(7种)汇总 同步的方法: 一.同步方法 即有synchronized关键字修饰的方法. 由于java的每个对象都有一个内置锁,当用此关键字修饰方法时, 内置锁会保护整个方法. ...

  4. java 同步锁_java线程中的同步锁和互斥锁有什么区别?

    在java中,同步锁和互斥锁英文关键字都是Synchronized,没有本质上的区别,两者都包括对资源的独占,使用起来没有区别.概念上的区别是 1:互斥是通过竞争对资源的独占使用,彼此没有什么关系,执 ...

  5. JAVA中线程同步的几种实现方法

    JAVA中线程同步的几种实现方法 一.synchronized同步的方法: 1.synchronized同步方法 即有synchronized关键字修饰的方法. 由于java的每个对象都有一个内置锁, ...

  6. Java中的string定义的两种方法和区别

    java中的String定义的两种方法和区别 第一种:new方式 String s1 = new String("hello world"); String s2 = new St ...

  7. java getabsolutepath,详谈java中File类getPath()、getAbsolutePath()、getCanonical的区别

    简单看一下描述,例子最重要. 1.getPath(): 返回定义时的路径,(就是你写什么路径,他就返回什么路径) 返回绝对路径,但不会处理"."和".."的情况 ...

  8. java中的path类_详谈java中File类getPath()、getAbsolutePath()、getCanonical的区别

    简单看一下描述,例子最重要. 1.getPath(): 返回定义时的路径,(就是你写什么路径,他就返回什么路径) 2.getAbsolutePath(): 返回绝对路径,但不会处理".&qu ...

  9. java中static、final 和 static final之间的区别

    java中static.final 和 static final之间的区别 static可以修饰:全局属性,方法,代码块,内部类(静态内部类或嵌套内部类) 由于静态属性和方法是属于该类的所有对象的,所 ...

最新文章

  1. 团队Blog功能改进
  2. VMware vSphere4.1看图识HA
  3. Lesson 4.34.4 梯度下降(Gradient Descent)基本原理与手动实现随机梯度下降与小批量梯度下降
  4. 深入探究递归神经网络:大牛级的训练和优化如何修成?
  5. MyBatis-04 MyBatis XML方式之insert元素
  6. HDU-2159 FATE 二维背包
  7. android 桌面视频播放器,ZY-Player ,一款跨平台桌面端视频资源播放器
  8. [置顶] 让我爱恨的ThinkPHP Relation
  9. sql server序列_SQL Server中身份和序列之间的区别
  10. 【05】CC - 格式
  11. centos7安装python3
  12. SWAT模型在水文水资源、面源污染模拟中的实践技术应用及典型案例分析
  13. Spotfire 表达式之逻辑函数
  14. 8个免费、高质量PPT素材网站,值得收藏
  15. 如何限制局域网计算机上网,怎么样禁止局域网用户修改电脑ip地址
  16. iOS UIFont原生字体和第三方字体.ttf的使用
  17. linux 移动存储设备弹出操作详解
  18. 通过使用阿里云的OCR图文识别 实现识别功能
  19. 【数字图像处理】实验一 图像的平移,缩放和旋转(vs2017+opencv)
  20. Jmeter Kafka插件开发之Sampler篇

热门文章

  1. 为什么机器学习工程师用PyTorch的多于TensorFlow?
  2. 【Python基础】关于Python的前后、单双下划线作用
  3. 谷歌开源下一代推荐系统模拟器:RecSim NG
  4. 搜索推荐系统实战:起始篇
  5. 互联网1分钟 |1229
  6. 一套高可用、易伸缩、高并发的IM群聊架构方案设计实践
  7. React事件系统研究总结
  8. 排序算法汇总(转载收藏)
  9. AI大神贾扬清确认将离开Facebook,加入阿里硅谷研究院
  10. Tomcat虚拟主机