随笔分类 - Java
摘要:Java SPI思想梳理 为什么说java spi破坏双亲委派模型? - 大宽宽的回答 - 知乎 深入理解 Java 中 SPI 机制
阅读全文
摘要:传送门: https://mp.weixin.qq.com/s/EZejQam6n_qU5ZLDOv82Rg
阅读全文
摘要:(1)wait为什么要在同步块中使用? 首先wait和notify方法是Object类中的 至于为什么它们是放在Object,我们稍后再分析; wait为什么要在同步块中使用? 仔细回顾一下,如果wait()方法不在同步块中,代码的确会抛出异常: public class WaitInSyncBlo
阅读全文
摘要:出处: Java字节码技术(一)static、final、volatile、synchronized关键字的字节码体现 static、final、volatile关键字 static:static修饰的变量被所有类实例共享,静态变量在其所在类被加载时进行初始化,静态方法中不能引用非静态变量或函数 f
阅读全文
摘要:出处: https://mp.weixin.qq.com/s/HH4ov97JkukLFg4EyPuzsQ 那在编程世界里,「锁」更是五花八门,多种多样,每种锁的加锁开销以及应用场景也可能会不同。 如何用好锁,也是程序员的基本素养之一了。 高并发的场景下,如果选对了合适的锁,则会大大提高系统的性能,
阅读全文
摘要:接着上篇内容 函数式编程接口 从上面的代码例子可以看出,我们使用Lambda表达式创建线程的时候,并不关心接口名,方法名,参数名。我们只关注他的参数类型,参数个数,返回值。 JDK原生就给我们提供了一些函数式编程接口方便我们去使用,下面是一些常用的接口: 简单说明一下: 表格中的一元接口表示只有一个
阅读全文
摘要:开局一张图,内容全靠摘录... 一:概述 什么是lambda表达式? lambda的语法规则 为什么需要引入lambda表达式? 什么是lambda表达式? 名词解释:lambda,其实是数学符号中的 λ,一个希腊字母。拉姆达 Lambda(大写Λ,小写λ),是第十一个希腊字母;在计算机术语中,La
阅读全文
摘要:想看几个例子的效果: public class LockSupportTest { public static void main(String[] args) { Thread t = new Thread(() -> { for(int i = 0; i < 10; i++) { System.
阅读全文
摘要:守护线程与用户线程 用户线程:我们平常创建的普通线程。 守护线程:用来服务于用户线程;不需要上层逻辑介入 java线程分为守护线程和非守护线程,当java jvm检测主线程或其他子线程执行完之后,守护线程也会马上停止执行,我们可以使用Thread.setDaemon(ture或false)来设置一个
阅读全文
摘要:1:自动装箱、拆箱 例子: Integer a = 10; //this is autoboxing //上面的操作其实就是下面这个,编译器会帮你自动转,不用手动 Integer b = Integer.valueOf(10); //under the hood 看下Integer中valueOf(
阅读全文
摘要:题目: import java.lang.ref.WeakReference; import java.util.WeakHashMap; public class Test1 { public static void main(String[] args) { String val = test(
阅读全文
摘要:代码实例: 问题:为什么testRunntimeException()方法没有出现编译错误提示,而testCheckedException()方法却出现unhandle exception? 分析: Excepiton分两类:checked exception、runtime exception;直
阅读全文
摘要:出处: Java编程如何高效利用CPU缓存? 引言 首先我们来看一个Java的例子: public class Main { static long[][] arr; public static void main(String[] args) { arr = new long[1024 * 102
阅读全文
摘要:出处: Java并发工具类之LongAdder原理总结 LongAdder实现原理图 高并发下N多线程同时去操作一个变量会造成大量线程CAS失败,然后处于自旋状态,导致严重浪费CPU资源,降低了并发性。既然AtomicLong性能问题是由于过多线程同时去竞争同一个变量的更新而降低的,那么如果把一个变
阅读全文
摘要:问题: sleep方法没有释放锁:不让出资源 wait方法释放了锁:使得其他线程可以使用同步控制块或者方法 sleep不释放锁 线程是进入阻塞状态还是就绪状态? sleep是不是还占着CPU,是互斥还是同步? 作者:大宽宽链接:https://www.zhihu.com/question/23328
阅读全文
摘要:问题:Java里一个线程调用了Thread.interrupt()到底意味着什么? 还有就是Thread.interrupted()会清除interrupted status意味着什么呢?是线程恢复了吗?这里实在搞不懂 概念 要弄清阻塞与中断的关系,首先得弄清楚什么叫做阻塞,什么叫做中断。 阻塞表示
阅读全文
摘要:出处: https://zhuanlan.zhihu.com/p/62534874 动态代理。这四个字一出来,估计很多初学者已经开始冒冷汗。动态代理之所以给人感觉很难,有三点原因: 代码形式很诡异,让人搞不清调用逻辑 用到了反射,而很多初学者不了解反射 包含代理设计模式的思想,本身比较抽象 尽管动态
阅读全文
摘要:出处: https://zhuanlan.zhihu.com/p/62660956 主要内容: 前情提要 接口创建对象的可行性分析 动态代理 Proxy.getProxyClass()的秘密 编写可生成代理和可插入通知的通用方法 类加载补充 前情提要 假设现在项目经理有一个需求:在项目现有所有类的方
阅读全文
摘要:出处: https://zhuanlan.zhihu.com/p/63126398 介绍完JDK动态代理,今天和大家一起做个小案例:模拟Spring的事务管理。 主要内容: 熟悉的陌生人 山寨AOP事务需求分析 AOP事务具体代码实现 熟悉的陌生人 面试官如果问“请你谈谈你对Spring的理解”,估
阅读全文