4、Concurrent Collections(并发集合类)
保护共享数据的一个关键技术是在存储数据的类中封装同步机制。所有对数据的使用都要经过同步机制的确认使这个技术能够避免数据的不当访问。在java.util.concurrent包中有很多为并发使用情况下设计的数据结构。通常,使用这些数据结构比使用同步包装器装饰的非同步的集合的效率更高。
4.1、Concurrent lists and sets
在Table2 中列出了java.util.concurrent包中拥有的3个并发的List和Set实现类。
类
|
描述
|
CopyOnWriteArraySet
|
CopyOnWriteArraySet在语意上提供写时复制(copy-on-werite)的特性,对这个集合的每次修改都需要对当前数据结构新建一个副本,因此写操作发费很大。在迭代器创建的时候,会对当前数据数据结构创建一个快照用于迭代。
|
CopyOnWriteArrayList
|
CopyOnWriteArrayList和CopyOnWriteArraySet类似,也是基于copy-on-write语义实现了List接口
|
ConcurrentSkipListSet
|
ConcurrentSkipListSet(在JavaSE 6新增的)提供的功能类似于TreeSet,能够并发的访问有序的set。因为ConcurrentSkipListSet是基于“跳跃列表(skip list)”实现的,只要多个线程没有同时修改集合的同一个部分,那么在正常读、写集合的操作中不会出现竞争现象。
|
skip list: http://blog.csdn.net/yuanyufei/archive/2007/02/14/1509937.aspx
http://zh.wikipedia.org/zh-cn/%E8%B7%B3%E8%B7%83%E5%88%97%E8%A1%A8
4.2、Concurrent maps
Java.util.concurrent包中有个继承Map接口的ConcurrentMap的接口,ConcurrentMap提供了一些新的方法(表3)。所有的这些方法在一个原子操作中各自提供了一套操作步骤。如果将每套步骤在放在map之外单独实现,在非原子操作的多线程访问的情况下会导致资源竞争。
表3:ConcurrentMap的方法:
方法
|
描述
|
putIfAbsent(K key, V value) : V
|
如果key在map中不存在,则把key-value键值对放入map中,否则不执行任何操作。返回值为原来的value,如果key不存在map中则返回null
|
remove(Object key, Object value) : boolean
|
如果map中有这个key及相应的value,那么移除这对数据,否则不执行任何操作
|
replace (K key, V value) : V
|
如果map中有这个key,那么用新的value替换原来的value,否则不执行任何操作
|
replace (K key, V oldValue, V newValue) : boolean
|
如果map中有这对key-oldValue数据,那么用newValue替换原来的oldValue,否则不执行任何操作
|
在表4中列出的是ConcurrentMap的2个实现类
方法
|
描述
|
ConcurrentHashMap
|
ConcurrentHashMap提供了2种级别的内部哈希方法。第一种级别是选择一个内部的Segment,第二种是在选定的Segment中将数据哈希到buckets中。第一种方法通过并行地在不同的Segment上进行读写操作来实现并发。(ConcurrentHashMap是引入了Segment,每个Segment又是一个hash表,ConcurrentHashMap相当于是两级Hash表,然后锁是在Segment一级进行的,提高了并发性。http://mooncui.iteye.com/blog/380884
http://www.iteye.com/topic/344876 )
|
ConcurrentSkipListMap
|
ConcurrentSkipListMap(JavaSE 6新增的类)功能类似TreeMap,是能够被并发访问的排序map。尽管能够被多线程正常的读写---只要这些线程没有同时修改map的同一个部分,ConcurrentSkipListMap的性能指标和TreeMap差不多。
|
分享到:
相关推荐
Java并发核心编程.pdf
#### 二、Java并发核心概念 在深入讨论具体技术细节之前,我们先了解一些关键的Java并发概念: 1. **Java Memory Model (JMM)**: - **定义**: 在Java SE 5 (JSR133)中引入的Java Memory Model (JMM)旨在确保编写...
Java并发核心编程是Java开发中的重要领域,它涉及到多线程和高效率程序设计的关键技术。在Java 5和Java 6中,JVM引入了大量的并发工具和改进,以支持多处理器和多核系统上的高性能应用程序。以下是这些知识点的详细...
Java并发编程中的多线程协作机制 在 Java 并发编程中,多线程协作机制是非常重要的一部分。多线程协作机制是指在多线程编程中,多个线程之间如何协作、同步和通信,以达到共同完成某个任务的目的。Java 提供了多种...
在Java并发编程中,多线程是核心概念之一。多线程允许程序同时执行多个任务,从而充分利用系统资源,提高程序性能。然而,多线程编程也带来了同步和竞态条件等问题,这需要开发者具备良好的线程管理和同步机制的知识...
《Java并发编程的艺术》这本书是Java开发者深入理解并发编程的重要参考书籍。这本书全面地介绍了Java平台上的并发和多线程编程技术,旨在帮助开发者解决在实际工作中遇到的并发问题,提高程序的性能和可伸缩性。 ...
《Java并发编程艺术》这本书深入探讨了Java平台上的并发编程技术。并发编程是现代多核处理器环境下提升软件性能的关键手段,而Java语言提供了丰富的工具和API来支持这一领域。本书旨在帮助开发者理解和掌握如何在...
### Java并发核心编程 #### 一、关于Java并发 自Java问世以来,就一直支持并发的概念,例如线程和锁等。并发编程是现代软件工程中不可或缺的一部分,尤其是在多核处理器普及的今天,利用好并发可以极大地提升程序...
根据提供的信息,“Java 并发编程实战.pdf”这本书聚焦于Java并发编程的实践与应用,旨在帮助读者深入了解并掌握Java中的多线程技术及其在实际项目中的应用技巧。虽然部分内容未能提供具体章节或实例,但从标题及...
《JAVA并发编程艺术》是Java开发者深入理解和掌握并发编程的一本重要著作,它涵盖了Java并发领域的核心概念和技术。这本书详细阐述了如何在多线程环境下有效地编写高效、可靠的代码,对于提升Java程序员的技能水平...
Java并发API的核心组件包括: 1. **ExecutorService**: 这是线程池的接口,通过它可以管理和控制线程的执行。`Executors`类提供了一些工厂方法来创建不同类型的线程池,如固定大小的线程池、单线程的Executor等。 ...
4. **线程池**:`ExecutorService`是Java并发框架的核心,它管理一组可重用线程,有效地调度和执行任务。`ThreadPoolExecutor`是其最常见的实现,允许自定义线程池参数。 5. **并发工具类**:如`CountDownLatch`、`...
这本书的读书笔记涵盖了多个关键知识点,旨在帮助读者深入理解Java并发编程的核心概念。 1. **线程和进程的区别** - **线程** 是程序执行的最小单位,一个进程中可以有多个线程同时执行,共享同一块内存空间,通信...
2. **同步机制**:Java并发编程的核心在于同步,以防止数据不一致性和资源竞争。`synchronized`关键字用于实现临界区的互斥访问,确保同一时刻只有一个线程执行特定代码块。此外,还有`wait()`, `notify()`, `...
这份“java并发编程内部分享PPT”显然是一个深入探讨这一主题的资料,旨在帮助开发者理解并掌握Java并发编程的核心概念和技术。 在Java并发编程中,首先我们需要了解的基本概念是线程。线程是操作系统分配CPU时间的...
《Java并发编程实战》是一本深入探讨Java平台并发编程的权威指南,由Tim Peierls等人与Brian Goetz合著,旨在帮助Java开发者理解和掌握在多线程环境中编写高效、安全的代码。这本书由拥有丰富经验的JDK并发大师及...
### Java并发编程实战知识点概述 #### 一、Java并发特性详解 在《Java并发编程实战》这本书中,作者深入浅出地介绍了Java 5.0和Java 6中新增的并发特性。这些特性旨在帮助开发者更高效、安全地编写多线程程序。书中...