`
Tonyguxu
  • 浏览: 279664 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

【Core Java】并发集合

 
阅读更多

并发容器与同步容器

 

并发容器:ConcurrentHashMap、ConcurrentSkipListMap。

同步容器:java.util.Collections中提供如下 “包装方法”。

 

public static <T> Collection<T> synchronizedCollection(Collection<T> c)
public static <T> List<T> synchronizedList(List<T> list)
public static <K,V> Map<K,V> synchronizedMap(Map<K,V> m)
public static <T> Set<T> synchronizedSet(Set<T> s)


synchronizedMap与 ConcurrentHashMap

 

synchronizedMap(Map)返回由指定映射支持的同步(线程安全的)映射。

  • 注意点

      synchronizedMap 在返回映射的任意 collection 视图上进行迭代时,用户必须手工在返回的映射上进行同步:

 

Map m = Collections.synchronizedMap(new HashMap());
      ...
  Set s = m.keySet();  // Needn't be in synchronized block
      ...
  synchronized(m) {  // Synchronizing on m, not s !!
      Iterator i = s.iterator(); // Must be in synchronized block
      while (i.hasNext())
          foo(i.next());
  }

  • 比较

      ConcurrentHashMap的设计是线程安全的,synchronizedMap通过同步的包装器实现了线程安全。区别在于前者比后者具备更佳的可伸缩性。单线程化的ConcurrentHashMap的性能要比同步的HashMap性能稍好些,而在并发应用中,这种差距更加明显。

 

http://www.linkedin.com/groups/Whats-difference-between-ConcurrentHashMap-CollectionssynchronizedMap-3125654.S.60580046 写道
Collections.synchronizedMap(Map) gives you a synchronized collection that wraps the original collection in it. Before concurrent API got introduced in Java1.5, this was the way to go if you need a synchronized map. But, this was inefficient. Java 1.5 addressed this and came up a set of concurrent collections which are very efficient to use in multi-threaded environment.

ConcurrentHashMap is not a replacement for Collections.synchronizedMap(Map)! Essentially, in a highly concurrent application (large number of threads) you can go for ConcurrentHashMap as it will allow multiple threads to access different parts of the concurrent hash map simultaneously. This is because internally the hash map is split into several parts according to the concurrency level specified during the creation of ConcurrentHashMap. If the concurrency level is set as 10 for example, then 10 threads would be able to update the hashmap concurrently without blocking.
This kind of feature may not be required for not so highly concurrent application. In those cases, Collections.synchronizedMap(Map) would suffice. Two threads cannot access the Map returned by Collections.synchronizedMap(Map) simultaneously without blocking. Remember, this has not been deprecated after the introduction of ConcurrentHashMap as there are still valid usecases when this can be used.
  

扩展阅读

1、《java并发编程实践》性能和可伸缩性

2、探索 ConcurrentHashMap 高并发性的实现机制

3、Java 理论与实践: 构建一个更好的 HashMap

 

 

分享到:
评论

相关推荐

    Java 并发核心编程原文+译文

    4. **并发集合**:Java 5引入了并发友好的集合框架,如`ConcurrentHashMap`、`CopyOnWriteArrayList`和`CopyOnWriteArraySet`等。这些集合在内部实现了线程安全的操作,提高了并发性能,避免了全锁的开销。 5. **...

    Core Java( Java 核心) PDF 教材

    10. **Java集合框架的高级主题**:包括并发容器,如ConcurrentHashMap,以及泛型、枚举、接口的默认方法等。 11. **Java开发工具**:如JVM(Java虚拟机)、JDK(Java开发工具包)、JRE(Java运行环境),以及如何...

    Core Java.JAVA核心技术(中文版)

    《Core Java.JAVA核心技术(中文版)》是学习Java编程的重要参考资料,主要涵盖了Java语言的基础以及进阶知识。这本书深入浅出地讲解了Java的核心概念和技术,为读者提供了全面而细致的学习路径。以下是对该书内容的...

    core java1&2

    《Core Java 1&2》是Java编程领域中两本非常经典的教材,分别对应于卷1和卷2,英文版提供了全面且深入的Java学习资源。这两本书由Cay S. Horstmann和Gary Cornell撰写,是许多程序员入门和进阶Java技术的重要参考书...

    core java 卷1 pdf

    包括迭代器、比较器、并发集合、Lambda表达式和Stream API等内容,这些是提高代码效率和简洁性的关键工具。 十八、JavaFX JavaFX是一个用于构建桌面、移动和嵌入式设备的富客户端应用程序的框架,提供了丰富的UI...

    java 核心卷9示例代码(corejava9)

    示例代码可能展示了这些接口和类的使用,如迭代器的使用,泛型的应用,以及并发集合的使用。 4. **IO流**:Java的IO系统支持输入/输出操作,包括字符流和字节流,以及NIO(非阻塞IO)。示例代码可能涵盖文件读写,...

    Core Java Volume II--Advanced Features(10th) Java核心技术第10版 第二卷 英文版

    这部分将深入探讨高级集合操作,如并发集合、泛型、Stream API的使用。 通过学习《Core Java Volume II--Advanced Features》中的这些高级主题,开发者可以提升自己的Java编程技能,更好地应对复杂的应用场景和挑战...

    CoreJava视频课程(百度云链接)

    多线程是Java并发编程的重要组成部分。Java通过Thread类和Runnable接口支持多线程编程。线程可以共享资源,但需要注意同步问题,避免出现竞态条件。 #### Lambda表达式 Lambda表达式是Java 8引入的新特性,用于简化...

    core java 学习java的书籍

    《Core Java 学习》是一本专为Java初学者和进阶者编写的经典教材,旨在帮助读者深入理解和掌握Java编程的核心概念和技术。书中的内容覆盖了Java语言的基础语法、面向对象编程、异常处理、多线程、集合框架、输入输出...

    core java 7th上

    11. **Java集合框架的高级主题**:包括并发容器、TreeSet和TreeMap的原理、Guava库的使用等,这些都是提升Java开发效率的关键知识。 12. **JVM内部**:了解JVM(Java虚拟机)的工作原理,包括内存管理、类加载机制...

    Core Java. 8th java核心技术第八版英文

    8. **并发编程**:涵盖线程、同步机制(synchronized关键字、Lock接口)、并发集合(如ConcurrentHashMap)以及ExecutorService和Future接口,帮助开发者编写高效且安全的多线程程序。 9. **反射API**:解释如何在...

    corejava8源码

    本资料集合了Core Java 8的源码,旨在帮助开发者深入理解Java语言的基础和高级特性,以及其背后的实现原理。 一、接口与默认方法(Default Methods) 在Java 8中,接口引入了默认方法(Default Methods),允许接口...

    Java 2 核心技术(第7版) CoreJAVA 7th Edithon(chm版)

    1. **并发编程**:讲解多线程编程,包括线程同步、守护线程、线程池和并发集合。 2. **网络编程**:涵盖Socket编程和URL处理,以及HTTP客户端和服务器端的实现。 3. **GUI编程**:介绍Java Swing组件库,用于构建...

    《core java》全部源码

    "Core Java全部源码"指的是书中示例代码的完整集合,对于学习者来说,能够亲手运行和调试这些源码,无疑是理解和掌握Java编程知识的有效途径。 源码在编程学习中扮演着至关重要的角色。通过阅读和分析源码,我们...

    CoreJava CoreJava

    《CoreJava CoreJava CoreJava 基础学习》 在Java编程领域,"CoreJava"通常指的是Java语言的核心部分,不涉及高级特性如Java EE(企业版)或Android开发。这个概念涵盖了Java语言的基础语法、类库以及面向对象编程...

    corejava9-10-11.zip

    "corejava.zip"这个通用代码集合可能是为了方便开发者不必区分版本而能够直接使用所有示例代码。而"corejava9.zip"和"corejava10.zip"则分别针对特定版本的新增特性和改进,让读者可以更加精确地实践和学习。这些...

    Core Java Volume I+II 10 edition

    10. **Java并发编程**:涵盖并发工具、原子变量类、并发容器如ConcurrentHashMap、CopyOnWriteArrayList等。 以上只是《Core Java Volume I+II 10th Edition》的部分关键知识点,全书内容丰富,不仅包含理论知识,...

Global site tag (gtag.js) - Google Analytics