- 浏览: 277876 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (161)
- 【**计划】 (2)
- 【**Core Java**】 (30)
- 【**JAVA EE】 (6)
- JDBC (3)
- Hibernate专题系列 (0)
- 【**OS】 (14)
- 【**架构设计/设计模式】 (11)
- 【Hadoop】 (3)
- 【**分布式】 (9)
- 模板 (1)
- C (2)
- 常用工具 (1)
- Oracle (2)
- 【Tips】 (3)
- 【数据库】 (2)
- 玩转Ubuntu (0)
- 【计算机网络/网络编程】 (7)
- 【**Search Engine】 (21)
- 【**专题**】 (6)
- 【**Python】 (10)
- XML (1)
- 【**Open Source Framework】 (1)
- 【高级主题】 (1)
- 【存储】 (3)
- 【笔试面试】 (2)
- 【**数据结构与算法设计】 (20)
- 【其他】 (3)
- 【编程练习】 (2)
- 【待完成】 (12)
- 【工作】 (6)
- 【软件研发】 (4)
- 【**多线程多进程编程】 (5)
- 【Web Service】 (1)
- 【表达式解析/JavaCC系列】 (5)
- 【缓存系统:Memcached】 (1)
- 【Java IO/NIO】 (5)
- 【JVM运行机制及内存管理】 (7)
最新评论
-
107x:
...
python list排序 -
yuzhu223:
...
【Python基础】Python的lambda函数与排序 -
Tonyguxu:
分析查询结果的打分小于11.query=1065800715* ...
lucene打分机制的研究 -
Tonyguxu:
query=139320661963.013709 = (MA ...
lucene打分机制的研究 -
Tonyguxu:
query=10658007150.6772446 = (MA ...
lucene打分机制的研究
并发容器与同步容器
并发容器: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.
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 高并发性的实现机制
发表评论
-
【Java IO】Java的序列化机制
2012-06-12 18:07 1028Java序列化机制采用的序列化算法: 1.所有保存到磁盘 ... -
LRU算法介绍
2012-06-05 22:30 3745问题背景 在操作系统的内存管理里,如何节省有限的内存并为尽可 ... -
关于 Java 对象序列化【转载】
2012-06-04 16:45 1395简介: Java 对象序列化(Java Object Seri ... -
数据结构之位图bitmap
2012-05-10 23:12 0http://dongxicheng.org/structur ... -
常见数据结构与算法汇总
2012-05-10 23:01 11051、常见数据结构 线性:数组,链表,队列, ... -
数据结构之位图
2012-05-10 18:34 5661介绍 (20120511)位图就是通过将数组下标与应用中 ... -
CRC循环校验
2012-05-10 15:11 1366http://www.360doc.com/content/1 ... -
map3搜索与存储的一道面试题
2012-05-10 15:10 922假设一个mp3搜索引擎收录了2^24首歌曲,并记录了可收听这些 ... -
字符串匹配算法——Edit distance
2012-05-09 11:20 2546如何比较两个字符串之间的相似程度(或者差异)? 想要比较 ... -
JavaCC/JJTree入门
2012-05-03 18:17 1417JavaCC 介绍 JJTree JJTree为了让 ... -
【Java NIO】内存映射文件
2012-04-24 14:16 1349java.nio包包含对下列特性的支持: 1.字符集 ... -
排序算法
2012-04-21 23:06 675插入排序 shell排序 ... -
【编程珠矶】开篇 千万号码的排序问题
2012-04-21 12:52 939注:学习了《编程珠矶》第一章,将涉及的一些知识点整理如下 ... -
【Core Java】正则表达式
2012-04-05 23:40 01 -
【Core Java】类加载
2012-04-02 21:16 856主要内容包括: 1.类加载 / 类连接 / 类初始化 2. ... -
【****Core Java提纲****】
2012-04-02 18:54 806Java IO NIO Java并发编程 ... -
Java编程中“为了性能”尽量要做到的一些地方[zz]
2012-03-19 23:31 8461. 尽量在合适的场合使用单例 使用单例可以减轻 ... -
【Java并发】线程安全
2012-03-10 15:44 1054什么是线程安全? 当多个线程访问一个类时,如果不用考 ... -
【Java Socket】
2012-03-07 18:49 2712 -
各个rules里代码分析
2012-03-06 10:54 760InternalChannelRule private ...
相关推荐
4. **并发集合**:Java 5引入了并发友好的集合框架,如`ConcurrentHashMap`、`CopyOnWriteArrayList`和`CopyOnWriteArraySet`等。这些集合在内部实现了线程安全的操作,提高了并发性能,避免了全锁的开销。 5. **...
《Core Java 1&2》是Java编程领域中两本非常经典的教材,分别对应于卷1和卷2,英文版提供了全面且深入的Java学习资源。这两本书由Cay S. Horstmann和Gary Cornell撰写,是许多程序员入门和进阶Java技术的重要参考书...
《Core Java.JAVA核心技术(中文版)》是学习Java编程的重要参考资料,主要涵盖了Java语言的基础以及进阶知识。这本书深入浅出地讲解了Java的核心概念和技术,为读者提供了全面而细致的学习路径。以下是对该书内容的...
10. **Java集合框架的高级主题**:包括并发容器,如ConcurrentHashMap,以及泛型、枚举、接口的默认方法等。 11. **Java开发工具**:如JVM(Java虚拟机)、JDK(Java开发工具包)、JRE(Java运行环境),以及如何...
包括迭代器、比较器、并发集合、Lambda表达式和Stream API等内容,这些是提高代码效率和简洁性的关键工具。 十八、JavaFX JavaFX是一个用于构建桌面、移动和嵌入式设备的富客户端应用程序的框架,提供了丰富的UI...
示例代码可能展示了这些接口和类的使用,如迭代器的使用,泛型的应用,以及并发集合的使用。 4. **IO流**:Java的IO系统支持输入/输出操作,包括字符流和字节流,以及NIO(非阻塞IO)。示例代码可能涵盖文件读写,...
这部分将深入探讨高级集合操作,如并发集合、泛型、Stream API的使用。 通过学习《Core Java Volume II--Advanced Features》中的这些高级主题,开发者可以提升自己的Java编程技能,更好地应对复杂的应用场景和挑战...
多线程是Java并发编程的重要组成部分。Java通过Thread类和Runnable接口支持多线程编程。线程可以共享资源,但需要注意同步问题,避免出现竞态条件。 #### Lambda表达式 Lambda表达式是Java 8引入的新特性,用于简化...
《Core Java 学习》是一本专为Java初学者和进阶者编写的经典教材,旨在帮助读者深入理解和掌握Java编程的核心概念和技术。书中的内容覆盖了Java语言的基础语法、面向对象编程、异常处理、多线程、集合框架、输入输出...
11. **Java集合框架的高级主题**:包括并发容器、TreeSet和TreeMap的原理、Guava库的使用等,这些都是提升Java开发效率的关键知识。 12. **JVM内部**:了解JVM(Java虚拟机)的工作原理,包括内存管理、类加载机制...
8. **并发编程**:涵盖线程、同步机制(synchronized关键字、Lock接口)、并发集合(如ConcurrentHashMap)以及ExecutorService和Future接口,帮助开发者编写高效且安全的多线程程序。 9. **反射API**:解释如何在...
本资料集合了Core Java 8的源码,旨在帮助开发者深入理解Java语言的基础和高级特性,以及其背后的实现原理。 一、接口与默认方法(Default Methods) 在Java 8中,接口引入了默认方法(Default Methods),允许接口...
1. **并发编程**:讲解多线程编程,包括线程同步、守护线程、线程池和并发集合。 2. **网络编程**:涵盖Socket编程和URL处理,以及HTTP客户端和服务器端的实现。 3. **GUI编程**:介绍Java Swing组件库,用于构建...
"Core Java全部源码"指的是书中示例代码的完整集合,对于学习者来说,能够亲手运行和调试这些源码,无疑是理解和掌握Java编程知识的有效途径。 源码在编程学习中扮演着至关重要的角色。通过阅读和分析源码,我们...
《CoreJava CoreJava CoreJava 基础学习》 在Java编程领域,"CoreJava"通常指的是Java语言的核心部分,不涉及高级特性如Java EE(企业版)或Android开发。这个概念涵盖了Java语言的基础语法、类库以及面向对象编程...
10. **Java并发编程**:涵盖并发工具、原子变量类、并发容器如ConcurrentHashMap、CopyOnWriteArrayList等。 以上只是《Core Java Volume I+II 10th Edition》的部分关键知识点,全书内容丰富,不仅包含理论知识,...
6. **Java集合框架的高级特性**:包括并发集合、TreeSet和TreeMap的实现原理,以及Guava库的使用。 7. **XML处理**:包括DOM、SAX和StAX解析XML的方式。 8. **Java数据库编程**:JDBC API的使用,以及数据库连接池...