
Java
文章平均质量分 63
Ibuprofen_xx
这个作者很懒,什么都没留下…
展开
-
ConcurrentHashMap源码分析
如果需要添加的链表已经存在哈希表table中,则通过tabAt方法,基于volatile机制,获取当前最新的链表头结点f,由于f指向的是ConcurrentHashMap的哈希表table的某条。如果当前需要put的key对应的链表在哈希表table中还不存在,即还没添加过该key的hash值对应的链表,则调用casTabAt方法,基于CAS机制来实现添加该链表头结点到哈希表。HashMap一样遍历该链表,如果该key对应的链表节点已经存在,则更新,否则在链表的末尾新增该key对应的链表节点。原创 2024-03-24 15:58:24 · 795 阅读 · 3 评论 -
AQS源码分析
自定义同步器的共享方式要么是独占(ReentrantLock),要么是共享(CountDownLatch/Semaphore),但是aqs也支持同时实现独占和共享的两种方式(ReentrantReadWriteLock)每个节点由线程封装,当线程抢夺锁失败后会封装成节点加入aqs队列中,通过cas,自旋以及LockSupport.park()的方式维护state变量状态,获取锁的线程释放锁后,随机从队列中唤醒一个阻塞的节点。Lock接口的实现类基本都是通过聚合了一个队列同步器的子类完成线程访问控制的。原创 2024-03-17 14:41:34 · 385 阅读 · 0 评论 -
AtomicInteger原理
AtomicInteger的本质:自旋锁 + CAS算法:当一个线程在获取锁时,如果锁已经被其他线程获取,当前线程就会不断循环检查锁是否被释放,直到获取到锁CAS的全成是: Compare And Swap(比较再交换);是现代CPU广泛支持的一种对内存中的共享数据进行操作的一种特殊指令。CAS可以将read-modify-write转换为原子操作,这个原子操作直接由处理器保证。CAS有3个操作数,内存值V,旧的预期值A,要修改的新值B。原创 2024-03-10 17:26:15 · 453 阅读 · 0 评论 -
ThreadLocal介绍
ThreadLocal中作为map中的key使用,而且ThreadLocalMap中的key是弱引用,弱引用对象在gc时会被回收,而ThreadLocalMap和Thread的生命周期一样长,就会存在key为null的情况,value访问不到,从而引发内存泄漏。ThreadLocal提供了线程局部变量,每个线程都可以通过set和get方法来对这个变量进行操作,但不会和其他线程的局部变量冲突,实现了线程的数据隔离。内存溢出:要求分配的内存超过了系统能给的。原创 2024-03-02 22:09:10 · 536 阅读 · 0 评论 -
JVM运行时数据区域
现代垃圾收集器大部分都是基于分代收集理论设计的,如新生代,永久代等,而这些仅仅是一部分垃圾收集器的设计风格而已,不是虚拟机固有布局,也不是对堆的进一步细致划分。Java堆既可以是固定大小的,也可以是可扩展的,目前主流的虚拟机都是按照可扩展来实现的,如果堆中没有内存完成实例分配,并且堆无法扩展时,将抛出OOM异常。无论从哪个角度,堆中存储的都只能是对象的实例,将Java堆细分只是为了更好的回收内存,更快的分配内存。相对来说,方法区垃圾收集比较少见,这部分内存回收的目标是针对常量池的回收和对类型的卸载。原创 2023-12-02 22:43:24 · 2042 阅读 · 0 评论 -
Stream流详解
Stream流详解,Lambda表达式原创 2023-03-18 22:14:32 · 98 阅读 · 0 评论 -
Java学习——异常 File IO流
继续学习Java原创 2023-02-25 21:42:17 · 110 阅读 · 0 评论 -
Java学习【第四周】
Java学习原创 2023-02-05 14:46:46 · 156 阅读 · 1 评论 -
Java学习
本周java学习原创 2023-01-15 17:17:49 · 168 阅读 · 1 评论 -
Java (2)
本周Java学习总结原创 2022-12-11 10:22:10 · 309 阅读 · 2 评论 -
初学java的感受
初学java原创 2022-12-03 23:31:09 · 450 阅读 · 1 评论 -
注解与反射
Java注解反射原创 2023-09-24 10:43:47 · 89 阅读 · 0 评论