- 关于 Collections.synchronizedList(List) 等一系列构建出来线程安全的List、Set、Map均为包装了一个基本的List、Set、Map上的读写操作方法上增加了synchronized锁(不管get、put、add等操作均加上了synchronized)
- 而Jdk的java.util.concurrent提供了高性能的一系列的线程安全的数据结构
常用线程安全的数据结构 :
-
CopyOnWriteArrayList : get方法无锁,add方法:每次都copy出1个副本,并且利用ReentrantLock加上了锁,所以add方法的性能是比较低的
public boolean add(E e) { final ReentrantLock lock = this.lock; lock.lock(); try { Object[] elements = getArray(); int len = elements.length; //这里会进行数组的整体复制 Object[] newElements = Arrays.copyOf(elements, len + 1); //修改副本 newElements[len] = e; //将副本设置回来 setArray(newElements); return true; } finally { //释放锁 lock.unlock(); } }
结论: 在读多写少的高并发环境中,使用CopyOnWriteArrayList 可以提高系统的性能;但是在写多读少的场合,CopyOnWriteArrayList 的性能还不如Vector。 - CopyOnWriteArraySet : 内部实现完全依赖于CopyOnWriteArrayList
- ConcurrentHashMap : 专门为线程并发而设计的HashMap,get()操作是无锁的,而put()操作的锁粒度又小于synchronized的HashMap,因此整体性能优于synchronized的HashMap。
- 并发Queue: JDK提供2套实现(两着都继承自Queue接口):
(1) : ConcurrentLinkedQueue为代表的高性能队列
场景: 适用于高并发场景下的队列,通过无锁的方式实现高并发下的高性能,ConcurrentLinkedQueue的性能要好于BlockingQueue。
(2) : BlockingQueue接口为代表的阻塞队列;
场景:BlockingQueue并不是在于提升高并发时的队列性能,而是在于简化多线程间的数据共享。主要用于生产者-消费者模式中。读写阻塞。主要有ArrayBlockingQueue和LinkedBlockingQueue。
5. 并发Deque(双端队列): 具体可以参考JDK源码。LinkedList,ArrayDeque,LinedBlockingDeque均实现了Deque接口。
相关推荐
"Java常见数据结构面试题(带答案)" 以下是对Java常见数据结构面试题的知识点总结: 栈和队列 * 栈和队列的共同特点是只允许在端点处插入和删除元素。 * 栈通常采用的两种存储结构是线性存储结构和链表存储结构...
- **并发数据处理**:利用Stream API结合并行流处理大量数据集,提高数据处理效率。 通过上述内容的学习,开发者不仅能掌握Java并发编程的基本原理和技术要点,还能学会如何将这些理论应用于实际工作中,解决复杂的...
在学习资源方面,"大学生 C/C++/JAVA/Python数据结构学习笔记和资料大全"涵盖了这些语言的基础知识,同时也包括了数据结构的深入学习,对于理解和实现并发数据结构会有很大帮助。my_resource文件可能包含了具体的...
《Java 并发编程实战》是一本专注于Java并发编程的权威指南,对于任何希望深入了解Java多线程和并发控制机制的开发者来说,都是不可或缺的参考资料。这本书深入浅出地介绍了如何在Java环境中有效地管理和控制并发...
此外,书中还介绍了Java并发容器,如ConcurrentHashMap、CopyOnWriteArrayList和BlockingQueue等,这些都是为并发环境设计的高效数据结构。它们在多线程环境下的性能和线程安全特性使得开发者能更方便地实现并发操作...
"Java并发编程与实践"文档深入剖析了这一主题,旨在帮助开发者理解和掌握如何在Java环境中有效地实现并发。 并发是指在单个执行单元(如CPU)中同时执行两个或更多任务的能力。在Java中,这主要通过线程来实现,...
例如,可以通过分解任务、优化数据结构等方式减少锁的竞争。 ##### 4.2 使用线程本地变量 对于不需要共享的数据,可以考虑使用ThreadLocal来存储线程私有的副本,这样可以避免不必要的线程间通信和同步操作。 ####...
4. **并发集合**:Java并发集合如`ConcurrentHashMap`、`CopyOnWriteArrayList`和`ConcurrentLinkedQueue`等,是为并发环境优化过的数据结构。它们内部实现了线程安全,能够在不引入全局锁的情况下实现高效并发操作...
对于有经验的开发者,它可能探讨了一些高级主题,比如并发数据结构、高效算法实现或特定Java库(如Collections框架)的使用。 在Linux社区版的背景下,这份资料可能还包含了如何在Linux环境下调试和测试这些数据...
3. **线程安全的数据结构**:书中深入讨论了Java并发安全的数据结构,如`ConcurrentHashMap`、`CopyOnWriteArrayList`和`Atomic*`类。这些数据结构在多线程环境下提供了高效且线程安全的操作,避免了同步开销。 4. ...
本资料“Java并发编程设计原则和模式”深入探讨了如何在Java环境中有效地进行并发处理,以充分利用系统资源并避免潜在的并发问题。 一、并发编程基础 并发是指两个或多个操作在同一时间段内执行,但并不意味着这些...
Java 数据结构测试题涉及到多个Java编程基础和设计概念,包括数据结构、软件设计工具、多分支语句(switch语句)、继承与多态、自定义表格模型以及并发控制。以下是这些知识点的详细解释: 1. **二分法查找**: - ...
BlockingQueue是一种队列数据结构,用于在生产者和消费者之间进行线程间的通信,它是并发编程中的一种重要模式。 线程池是Java并发编程的另一个关键概念。ThreadPoolExecutor允许我们预先配置线程数量,从而更好地...
第二部分 结构化并发应用程序 第6章 任务执行 6.1 在线程中执行任务 6.1.1 串行地执行任务 6.1.2 显式地为任务创建线程 6.1.3 无限制创建线程的不足 6.2 Executor框架 6.2.1 示例:基于Executor的Web服务器 ...
- **并发容器**:如`ConcurrentHashMap`、`CopyOnWriteArrayList`、`BlockingQueue`等,它们内部实现了线程安全的数据结构。 4. **并发设计模式** - **生产者消费者模型**:使用`BlockingQueue`实现,生产者线程...
Java数据结构是编程领域中的重要概念,它涉及如何在内存中高效地组织和管理数据,以便于快速访问和操作。本课件详细介绍了Java中常用的数据结构,包括数组、链表、栈、队列、树、图以及哈希表等。下面我们将逐一深入...