JDK
文章平均质量分 79
吕哥架构
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
JDK源码系列:StringBuffer与StringBuilder对比
一、源码分析StringBuffer与StringBuilder的区别1、StringBuffer是多线程安全的,StringBuilder是多线程不安全的多线程安全指的是 多个线程同时对一个对象进行append 等操作,不会出现覆盖、丢失的情况。看下StringBuffer是如何做到多线程安全的:StringBuffer类中除了构造方法,几乎所有方法都加了synchronized关键字来保证线程...原创 2023-11-25 23:26:08 · 316 阅读 · 0 评论 -
JDK源码系列:ThreadLocal弱引用真的是过度设计吗?
在《码处高效:Java开发手册》这本书上详细描述了ThreadLocal的原理,也有过度设计的说法,难道弱引用设计真的没必要吗?对此老吕要仔细分析分析,ThreadLocal到底该不该使用弱引用设计。JDK作为构建Java应用生态的原始生产资料和工具,它的每一行代码相信都是经过深思熟虑的(也有考虑不周的,后续版本会标上废弃或者改进代码)。回忆ThreadLocal原理ThreadLocal本质是一...原创 2023-04-02 20:00:17 · 458 阅读 · 1 评论 -
JDK源码系列:ThreadLocalMap内存泄漏“自动回收的触发场景”分析
在前面的文章中老吕分析了ThreadLocal的实现原理,ThreadLocal的内存泄漏,ThreadLocalMap 失效条目清理原理,本文分析下ThreadLocal内存回收的触发时机。一、getEntry(key)触发时机:发生哈希冲突时触发getEntry逻辑如下:1、直接命中,返回Entry结束,此种场景不会触发内存回收(对应key存在且没有hash冲突的场景)2、没有直接命中,通过线...原创 2023-03-23 17:30:08 · 675 阅读 · 0 评论 -
JDK源码系列:ThreadLocalMap到底是如何清理失效节点的?
在前面的关于ThreadLocal的文章中提到了所谓的内存泄漏问题,同时也提到了ThreadLocalMap在某些场景下会主动清理坏掉的Entry来释放内存,要理解它是怎么做到的,就必须理解它是怎么解决哈希冲突的,尤其是“真删除”Entry后如何保证不影响后续Entry的查找问题一、哈希冲突的解决:线性探测法在线性探测法中插入和查找和修改都比较容易理解,难点在于删除动作,因为删除动作可能会影响后续...原创 2023-03-22 16:02:21 · 823 阅读 · 0 评论 -
手撕一个解决ThreadLocal数据跨线程传递的实用工具
大家好,老吕在前面的文章中提到了如何解决不同场景下ThreadLocal数据传递问题,并且给出了阿里开源TTL框架和手写组件的方案。后来老吕还是觉得TTL的方案有点复杂,手写那个组件不够通用,所以就做了改进,使读写数据通用化。设计比较简单实用,一个类就搞定了,思路还是通过代理Runnable和Callable接口来增加数据中转的能力,我一直认为这个思路是最划算的。本次加强...原创 2022-05-23 20:24:43 · 608 阅读 · 0 评论 -
JDK源码系列:子线程如何继承父线程上通过ThreadLocal绑定的数据
上一篇中老吕介绍了ThreadLocal线程数据绑定的原理,今天聊聊父子线程之间如何继承ThreadLocal上维护的数据。开发过程中异步执行任务有两种情况,第一种情况是 主线程 通过 new Thread()的方式产生了一个子线程,然后把 task 交给子线程去执行;第二种情况是主线程将task提交到线程池去执行。不同的情况需要不同的方...原创 2022-04-26 17:56:23 · 1934 阅读 · 1 评论 -
JDK源码系列:ThreadLocal实现原理
大家好,在软件开发过程中,一般情况下方法之间调用时都是通过接口参数来传递数据的,但有一些公共参数(userId、token、orgId、roleId等)的传递就不能那么干了,在Java中一般用ThreadLocal 去解决这个问题,今天老吕来分析下ThreadLocal的源码。一、ThreadLocal的本质通过共享内存来传递数据。但它是如何做到多线程安全...原创 2022-04-25 15:49:54 · 431 阅读 · 0 评论 -
JDK源码系列:AQS(队列同步器)原理
大家好,好久不见,今天看下JDK中的JUC包中AQS(AbstractQueuedSynchronizer 队列同步器)的实现原理。JUCL下的锁和synchronized提供的锁的区别1、锁的获取和释放是显示的靠程序员用代码来控制的,增加了灵活性,可以实现更加复杂的应用场景2、尝试非堵塞式的获取锁3、可中断的获取锁4、可超时的获取锁5、等待队列可按条件分...原创 2022-04-17 20:03:03 · 409 阅读 · 0 评论 -
JDK源码系列:synchronized与wait、notify、notifyAll
大家好,今天聊一聊synchronized与obj.wait()、obj.notify()、obj.notifyAll() 之间的关系以及它们的实现原理。我们今天采用边写demo边分析的方式来进行。案例1:public class SyncDemo { public synchronized int add(int a,int b){ ...原创 2022-03-28 13:59:15 · 433 阅读 · 0 评论 -
JDK源码系列:Future是如何实现的?
大家好,我们在异步编程时向线程池提交(submit)一个任务后会得到一个 Future对象,通过 future.get() 方法可以堵塞等待结果的完成,例如:public ...原创 2022-03-20 23:33:55 · 546 阅读 · 0 评论
分享