- 关于 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常见数据结构面试题的知识点总结: 栈和队列 * 栈和队列的共同特点是只允许在端点处插入和删除元素。 * 栈通常采用的两种存储结构是线性存储结构和链表存储结构...
第二部分 结构化并发应用程序 第6章 任务执行 6.1 在线程中执行任务 6.1.1 串行地执行任务 6.1.2 显式地为任务创建线程 6.1.3 无限制创建线程的不足 6.2 Executor框架 6.2.1 示例:基于Executor的Web服务器 ...
Java并发编程实践.pdf 本文档讲述了Java并发编程实践,特别是使用开源软件Amino构建并发应用程序。Amino是一个开源软件,具有可操作性、跨平台性、无锁数据结构等特点,适用于多核操作系统。下面是本文档的知识点...
Java数据结构是编程领域中的重要概念,它涉及如何在内存中高效地组织和管理数据,以便于快速访问和操作。本课件详细介绍了Java中常用的数据结构,包括数组、链表、栈、队列、树、图以及哈希表等。下面我们将逐一深入...
Java知识点总结,面试必备,java基础、java集合、JVM、Java并发、数据结构与算法、LeetCode、剑指offer、计算机网络、设计模式、MySQL、Redis.zip
此外,《Java数据结构和算法(第二版)》的更新可能会包含更多现代Java特性的应用,如泛型、并发处理和集合框架的高级用法,使得学习内容更贴近现代编程实践。 总的来说,这本书是学习Java数据结构和算法的宝贵资源...
完成一个用于列车售票的可线性化并发数据结构:`TicketingDS`类: 1. 实现`TicketingSystem`接口, 2. 提供`TicketingDS(routenum, coachnum, seatnum, stationnum, threadnum);`构造函数。其中: - `routenum`是...
《Java并发编程实践》是一本深入探讨Java多线程与并发编程的经典著作,其源码提供了丰富的示例,帮助读者理解和应用并发编程的核心概念。在这些文件中,我们可以看到多种并发设计模式和策略的实际运用,下面将逐一...
在编程领域,尤其是Java开发中,数据结构与算法是核心基础,它们对于编写高效、优化的代码至关重要。这个“java数据结构经典例题”压缩包很可能是包含了一系列关于数据结构和算法的练习题及解决方案,旨在帮助学习者...
5. **并发集合**:Java并发集合如ConcurrentHashMap、CopyOnWriteArrayList等,提供了线程安全的数据结构,能够在多线程环境下高效地操作数据。书中详细分析了它们的实现原理和性能特点。 6. **线程池**:线程池是...
Java是一种广泛使用的面向对象的编程语言,具有丰富的库支持,使得在Java中实现数据结构变得既方便又强大。在清华大学出版社出版的朱站立编著的《数据结构》一书中,作者深入浅出地讲解了数据结构的基本概念、设计与...
黑马Java八股文面试题视频教程,Java面试八股文宝典(含阿里、腾迅大厂java面试真题,java数据结构,java并发,jvm等最新java面试真题)
并发集合是并发编程中常用的数据结构,如`ConcurrentHashMap`、`CopyOnWriteArrayList`等。这些集合类在内部实现了线程安全的操作,允许在并发环境中高效地读写数据,避免了显式同步的繁琐。`ConcurrentHashMap`通过...
黑马Java八股文面试题视频教程,Java面试八股文宝典(含阿里、腾迅大厂java面试真题,java数据结构,java并发,jvm等最新java面试真题)
Java知识点总结,面试必备,java基础、java集合、JVM、Java并发、数据结构与算法、LeetCode、剑指offer、计算机网络、设计模式、MySQL、Redis
- **线程安全的数据结构**:如Vector、HashTable等,以及它们在并发环境下的行为。 - **线程池**:虽然书中没有涉及Java 5引入的ExecutorService,但介绍了线程池的基本概念。 2. **《Java Concurrency in ...
Java数据结构和算法是计算机科学中的核心概念,对于任何Java开发者来说,理解并熟练掌握它们至关重要。本资源提供了一份PDF格式的教程,其中详细讲解了Java语言中的数据结构和算法,并且附带了示例代码以及Applet,...
《Java并发编程:设计原则与模式》是一本深入探讨Java多线程编程的书籍,它涵盖了并发编程中的关键概念、原则和模式。在Java中,并发处理是优化应用程序性能、提高资源利用率的重要手段,尤其在现代多核处理器的环境...
本书首先介绍了Java并发的基础,包括线程的创建与管理、同步机制如synchronized和volatile关键字,以及线程安全的数据结构。这些基础知识对于理解并发编程至关重要,因为它们帮助开发者避免常见的并发问题,如竞态...
在编程领域,尤其是在Java开发中,理解和掌握数据结构与算法是至关重要的。这些基础知识能够帮助开发者设计出高效、可扩展的软件系统。本资源包"Java数据结构与算法"聚焦于Java语言中对数据结构的实现和算法的研究,...