`
跑龙套_az
  • 浏览: 7670 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

java.util.concurrent(一) 并发集合类

阅读更多

1、LinkedBlockingQueue

           阻塞队列、线程安全,可在构造方法参数中指定容量、默认容量为Integer.MAX_VALUE,实现了BlockingQueue接口以及Collection和Iterator接口的所有方法,不接受null元素。常用方法有put和take,put方法在队列满的时候会阻塞直到有成员被消费,take方法在队列空的时候会阻塞,直到有成员被放进来。

 

2、ConCurrentLinkedQueue

          非阻塞队列、线程安全,无界队列,不接受null元素,采用CAS操作保证元素一致性,实现基于有效的“无等待(wait-free)”算法。与大多数collection不同,size()方法不是固定时间操作,由于该队列异步特性、确定元素数量需要遍历这些元素。

 

3、CopyOnWriteArrayList

          使用读写分离技术。适用于读操作远远大于写操作的场景、比如缓存。

          CopyOnWriteArrayList里的写操作是先将原始数据通过Arrays.Copyof()来生成一份新的数组、然后在新的数组上进行写,写完后将原来的引用指向到当前这个数组对象,这样保证了每次写都在新对象上(保证写的一致性,对各种写操作需加锁)、读则在当前对象上进行读,不存在加锁和阻塞。

 

4、ConcurrentHashMap

          HashMap线程不安全,HashTable采用Synchronized保证线程安全,但是在线程激烈的情况下效率非常低,因为竞争的是同一把锁。

          concurrentHashMap采用了锁分段技术。该集合的get操作非常高效,该操作并未加锁,除非读到空值才会加锁重读。ConcurrentHashMap将HashEntry的共享变量value定义为Volatile类型,该变量的读操作happen-before与对其的写操作,因此可以不用加锁直接读取。put操作需要加锁,第一步判断是否需要扩容,后进行put操作;因为采用了锁分段技术、对各个段的put操作竞争不同的锁,可以高效的进行操作。

分享到:
评论

相关推荐

    java.util.concurrent系列文章(1)

    本篇文章将深入探讨 `java.util.concurrent` 包中的一些核心概念和技术,特别是 `ConcurrentHashMap` 和 `CopyOnWriteArrayList` 这两个集合类。 #### 二、线程安全问题概述 线程安全性是指在多线程环境中,代码...

    The java.util.concurrent Synchronizer Framework

    为了更好地支持并发编程,Java平台在J2SE 1.5版本中引入了`java.util.concurrent`包,这是一个包含了许多中级并发支持类的集合,通过Java社区过程(Java Community Process, JCP)的Java规范请求(Java ...

    java.util.concurrent.uml.pdf

    描述中提到了“Java并发编程工具包java.util.concurrent的UML类结构图 PDF”,这强调了文件是一个图表,它可能包括并发包中的线程安全集合、同步器、线程池、执行器等核心组件的类图和接口图。 标签“Java ...

    java并发工具包 java.util.concurrent中文版-带书签版

    3. **并发集合**:Java并发工具包提供了一系列线程安全的集合类,如`ConcurrentHashMap`、`CopyOnWriteArrayList`和`ConcurrentLinkedQueue`。这些集合类在多线程环境下可以避免同步锁的开销,提高性能。 4. **原子...

    java_util_concurrent中文版pdf

    在Java并发编程中,`java.util.concurrent`(简称JUC)提供了丰富的类和接口,如Executor框架、线程池、并发集合、同步工具类等。这些工具使得程序员能够更方便地管理线程,避免了传统的锁和同步机制带来的复杂性和...

    java.util.concurrent 测试源文件

    Java.util.concurrent(JUC)是Java平台中的一个核心包,专门用于处理多线程并发问题。这个包包含了大量的工具类和接口,极大地简化了并发编程的复杂性,提高了程序的性能和可伸缩性。本测试源文件主要是针对JUC并发...

    java.util.concurrent介绍(重要).pdf

    总之,`java.util.concurrent` 提供的工具使得并发编程变得更加容易和高效,是 Java 并发编程的基石,无论是对于初学者还是经验丰富的开发者,理解和掌握这个包都是非常重要的。通过熟练运用这些工具,开发者可以...

    java.util.vector中vector小结

    在Java编程语言中,`java.util.Vector`是一个重要的集合类,它是`ArrayList`的早期版本,提供了线程安全的动态数组实现。这篇文章将对`Vector`类进行详细的总结,包括其特点、用法以及与`ArrayList`的区别。 1. **...

    java.util.concurrent系列文章(2)

    在上一篇文章中,我们简要介绍了并发集合类的基本概念及其重要性,并探讨了如何通过共享数据结构的方法来提高程序的并发性和吞吐量。本文将继续深入到 `java.util.concurrent` 包中的 `ConcurrentHashMap` 类,它是...

    atlassian-util-concurrent-0.0.12.jar.zip

    - **并发容器**:扩展了Java的并发集合,比如线程安全的队列和堆栈,这些容器在多线程环境下提供了高效的数据存储和访问。 - **执行器服务**:提供了一些预定义的ExecutorService实现,可以方便地启动和停止任务,...

    出现java.util.ConcurrentModificationException 问题及解决办法

    在Java编程中,`java.util.ConcurrentModificationException` 是一个常见的运行时异常,通常发生在尝试并发修改集合时。这个异常的产生是由于集合类(如HashMap)的非线程安全特性,当你在一个线程中使用迭代器遍历...

    JBuider第七章:Java.util包.rar

    Java.util.concurrent包(虽然不是直接在Java.util下,但密切相关)包含了一系列线程安全的数据结构和并发工具,如Semaphore、ExecutorService、CountDownLatch等,极大地简化了多线程编程。 8. **枚举Set**: ...

    java-util大全.rar

    Java Util大全是一个集合了多种实用工具类的压缩包,涵盖了Java开发中常见的各种操作,如加密解密、日期时间处理、HTTP请求、JSON解析、文件服务器整合等。这些工具类在实际开发中起到了非常关键的作用,能提高代码...

    java.util.ConcurrentModificationException 解决方法

    Java 提供了并发支持的集合类,如 `ConcurrentHashMap`。它允许在多线程环境中并发读写,内部已经处理了并发修改的问题。所以,你可以将 `HashMap` 替换为 `ConcurrentHashMap` 来避免此类异常。 ```java import...

    java工具类集合

    Java工具类集合是Java开发中不可或缺的一部分,它们提供了一系列便捷的方法,帮助开发者高效地处理各种常见任务。在Java中,工具类通常被组织在各种包下,如`java.util`、`java.lang`、`java.io`等。下面将详细介绍...

    JUC-High-Concurrency:java.util.concurrent JUC高并发处理

    Java.util.concurrent(JUC)是Java平台中处理高并发的核心工具包,它为开发者提供了丰富的并发组件和机制,使得在多线程环境下的编程变得更加高效和安全。本篇将深入探讨JUC中的重要知识点,包括同步、可重入锁、类...

    28个java常用的工具类

    10. **`java.util.concurrent.*`**: 并发库,包括线程池、并发容器(如`ConcurrentHashMap`)、原子变量(如`AtomicInteger`)等。 11. **`java.io.File`**: 文件和目录操作,如创建、删除、读取文件信息。 12. **...

    java_util_concurrent_user_guide

    5. **并发集合**: JUC提供了许多并发友好的集合类,如`ConcurrentHashMap`、`ConcurrentLinkedQueue`、`CopyOnWriteArrayList` 和 `CopyOnWriteArraySet`。这些集合在多线程环境下能保证数据的一致性和线程安全性。 ...

    30个常用java工具类

    8. **`java.util.concurrent`** 包:提供并发工具类,如`ExecutorService`、`Future`和`Semaphore`,帮助管理线程和控制并发。 9. **`java.util.Map.Entry`**:表示Map中的键值对,常用于遍历Map。 10. **`java....

Global site tag (gtag.js) - Google Analytics