java基础知识
文章平均质量分 91
是谢添啊
做一个纯粹的技术分享者。别担心打扰我,我随时都在。
展开
-
Spring的循环依赖问题
你的完整创建要依赖与我,我的完整创建也依赖于你。相互依赖从而没法完整创建造成失败。一级缓存:存储的是 成品Bean 对象 ,存储的所有的单例对象,其实可以说和循环依赖没有关系。二级缓存:存储的是 半成品对象,是解决循环依赖的关键,如果不去考虑 AOP 代理增加的情况,只有二级缓存的情况下也是可以解决循环依赖的,也就是不需要三级缓存。三级缓存:三级缓存存在的意义是解决 AOP 增强对象的原因,存储的是一个 Lambda 表达式(内部类)--> ObjectFactory。原创 2023-11-10 10:05:18 · 1182 阅读 · 1 评论 -
FutureTask配合Thread实现处理有返回结果的源码、逻辑与架构分析
FutureTask 能够接收 Callable 类型的参数,用来处理有返回结果的情况。FutureTask 类在实例化构造时需要传入一个实现了Callable接口的类,实现 Callable 接口需要重写 call 方法,该方法需要一个返回值,由于 Callable 定义时是以泛型定义返回值,因此我们可以自定义返回值。FutureTask 会将传入的这个 Callable 实现类赋给自己的属性 `private Callable callable;`原创 2023-10-20 22:01:26 · 488 阅读 · 1 评论 -
一文打通:从字节码指令的角度解读前置后置自增自减(加加++减减--)
分析了单独使用前置++和后置++的指令,我们发现字节码指令是一样的,实际上都是将局部变量表对应位置的数据进行加1操作。🚩 当单独使用++或--时,不需要关心其返回值,因此前置和后置的效率是一样的。实际上,在编译时,编译器可能会将单独使用的++或--运算符优化为一条简单的指令iinc,因此在机器指令级别上,它们的执行效率是相同的。后置++(先操作再加1):先复制一份局部变量表对应数据压入到操作数栈,再将局部变量表对应数据加1。原创 2023-06-10 19:08:03 · 1533 阅读 · 0 评论