- 博客(20)
- 收藏
- 关注
原创 多线程之常见锁机制的底层实现分析
java集合篇之ConcurrentHashMap解析与源码解读-优快云博客,这篇文章中有描述。AQS(抽象队列同步器)是Java并发包()的核心基础框架,几乎所有Java锁和同步工具(如Semaphore等)的底层实现都依赖于它。它的核心思想是通过一个共享资源状态(state)和一个线程等待队列,统一管理线程的阻塞、排队、唤醒逻辑。核心机制。
2025-02-27 19:22:50
710
原创 多线程之ThreadLocal
是 Java 中用于实现线程本地存储的重要工具,它能够有效地解决多线程环境下的共享变量竞争问题。的核心思想是为每个线程提供一个独立的变量副本,从而避免多线程环境下的共享变量竞争问题。,可以为每个线程提供独立的变量副本,从而在多线程环境中实现线程安全的数据访问。,这是一个自定义的哈希表,用于存储线程的本地变量。,这是一个自定义的哈希表,用于存储线程的本地变量。在这个例子中,每个线程都独立地维护自己的。以下是一个简单的示例,展示如何使用。的子类,它允许子线程继承父线程的。在这个例子中,子线程继承了父线程的。
2025-02-27 15:21:59
600
原创 多线程之CAS
是一种无锁编程技术,用于实现多线程环境下的原子操作。它是现代并发编程的核心机制之一,广泛应用于 Java 的Atomic类、锁实现(如)以及其他高性能并发框架中。
2025-02-26 17:57:45
873
原创 多线程之synchronized
每个 Java 对象都有一个与之关联的 Monitor,通过获取和释放 Monitor 来实现线程同步。是基于 Java 对象头中的。在 Java 6 之后,
2025-02-26 16:49:36
309
原创 线程安全问题
指当多个线程同时访问共享资源(如变量、对象、文件等)时,由于线程执行顺序的不确定性或资源竞争,可能导致数据不一致、程序崩溃或逻辑错误的现象。现代计算机体系下的CPU、内存、I/O设备的速度是有极大差异的,程序运行时,内存读写和IO设备的读写速度远远跟不上CPU计算的速度,这导致CPU性能过剩,或者说,无法完全发挥CPU性能的问题。当线程因为等待IO读写而陷入阻塞时,该线程是不需要CPU的,因为此时是由其他硬件设备进行读写操作的。
2025-02-26 16:47:42
810
原创 java集合篇之Queue解析与源码分析
Java 中的Queue接口是java.util包中定义的先进先出(FIFO)数据结构,属于 Java 集合框架的一部分。它扩展了Collection插入add(e)(失败抛异常)、offer(e)(失败返回false移除remove()(空队列抛异常)、poll()(空队列返回null查看队头element()(空队列抛异常)、peek()(空队列返回null。
2025-02-21 16:36:15
341
原创 java集合篇之HashTable解析与源码分析
HashTable 是 Java 早期(JDK 1.0)提供的的键值对集合,基于“数组 + 链表”实现,与HashMap类似但设计上存在显著差异。nullget(null)HashMapnullnull容量 * 负载因子。
2025-02-21 14:21:50
273
原创 java集合篇之ConcurrentHashMap解析与源码解读
CAS 是一种原子操作,其原子性由 CPU 的硬件指令(如CMPXCHG)提供支持。CAS 的不可分割性和内存屏障确保了操作的完整性和一致性,使其成为实现无锁编程和高效并发的重要工具。然而,CAS 也有一些局限性,需要在实际应用中结合其他技术来解决。
2025-02-21 13:42:46
909
原创 java集合篇之TreeMap解析与源码分析
TreeMap是 Java 集合框架中的一个基于红黑树(Red-Black Tree)实现的有序映射(Map)。它继承自并实现了接口,能够根据键的自然顺序或自定义比较器对键进行排序。TreeMap的主要特点是键值对是有序的,并且支持高效的查找、插入和删除操作。
2025-02-20 17:10:04
818
原创 Java 集合之 LinkedHashMap 解析与源码分析
通过哈希表 + 双向链表的复合结构,在保持高效查询的同时实现顺序维护。巧妙的钩子方法重写:复用HashMap的哈希逻辑,仅通过重写少量方法实现有序性灵活的 LRU 支持:通过和快速实现缓存淘汰策略低成本的顺序迭代:直接遍历链表(O(n))而非哈希桶数组(
2025-02-20 16:08:35
610
原创 Java集合篇之HashMap解析与源码分析
HashMap是Map接口的一个实现类,它基于哈希表实现,允许存储键值对。HashMap通过哈希函数将键映射到哈希表中的某个位置,从而实现快速的查找、插入和删除操作。
2025-02-20 14:27:43
1735
原创 Java集合篇之CopyOnWriteArrayList解析与源码解读
是List接口的一个线程安全实现类,它基于动态数组实现,允许存储重复元素和null值。与Vector和不同,在读操作时不加锁,而在写操作时通过复制整个数组来实现线程安全。作为Java并发包中的一个线程安全的List实现类,采用“写时复制”策略,适用于读多写少的场景。通过源码解析,我们可以更好地理解的写时复制机制、添加和删除元素的实现细节,以及其线程安全的特性。然而,它也存在一些潜在的性能问题,如内存占用增加、写操作性能下降以及频繁的垃圾回收。因此,在使用时,需要根据具体的使用场景进行权衡和选择。
2025-02-20 11:39:33
797
原创 Java集合篇之Vector解析与源码解读
Vector是List接口的一个实现类,它基于动态数组实现,允许存储重复元素和null值。与ArrayList相比,Vector是线程安全的,但由于其同步机制,性能上不如ArrayList。Vector作为Java集合框架中一个古老的类,其内部实现基于动态数组,并且是线程安全的。通过源码解析,我们可以更好地理解Vector的扩容机制、添加和删除元素的实现细节,以及其线程安全的特性。在实际开发中,虽然Vector在多线程环境下可以安全使用,但由于其同步机制导致的性能开销,通常更推荐使用来包装。
2025-02-20 11:18:29
854
原创 java集合篇之LinkedList解析与源码解读
LinkedList是List接口和Deque接口的实现类,它基于双向链表实现,允许存储重复元素和null值。与ArrayList相比,LinkedList在插入和删除操作上具有更高的效率,但在随机访问时性能较差。LinkedList作为Java集合框架中另一个重要的实现类,其内部实现基于双向链表,适用于频繁插入和删除操作的场景。通过源码解析,我们可以更好地理解LinkedList的插入和删除操作的实现细节,以及其非线程安全的特性。在实际开发中,合理使用LinkedList可以大大提高程序的效率和可维护性。
2025-02-20 10:41:53
367
原创 java集合篇之ArrayList解析与源码解读
ArrayList是List接口的一个实现类,它基于动态数组实现,允许存储重复元素和null值。与普通数组相比,ArrayList具有自动扩容的特性,可以根据需要动态调整数组的大小。ArrayList作为Java集合框架中最常用的类之一,其内部实现基于动态数组,提供了快速的随机访问和高效的尾部插入操作。通过源码解析,我们可以更好地理解ArrayList的扩容机制、添加和删除元素的实现细节,以及其非线程安全的特性。在实际开发中,合理使用ArrayList可以大大提高程序的效率和可维护性。
2025-02-20 10:28:43
617
原创 docker部署项目详解(配置文件、log日志、图片文件挂载、容器与宿主机同步时间)
docker项目发布详解(配置文件、log日志、图片文件挂载、容器与宿主机同步时间)1、打包springboot项目为jar包(引入docker插件)<properties> <docker.image.prefix>springboot</docker.image.prefix></properties><plugin> <groupId>com.spotify</groupId>
2021-06-07 15:33:19
4994
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人