摘要: volatile 关键字只能用于修饰变量,无法用于修饰方法。并且 volatile 只能保证可见性,但不能保证操作的原子性。 在具体编程中体现为:volatile 只能保证基本类型以及一般对象的引用赋值是线程安全的。 volatile工作原理 为什么 volatile 只能保证可见性,不能保证原子性 阅读全文
posted @ 2021-03-09 23:55 猿必过 阅读(427) 评论(0) 推荐(0) 编辑
摘要: synchronized的锁升降级 Java SE1.6为了减少获得锁和释放锁所带来的性能消耗,引入了“偏向锁”和“轻量级锁”, 所以在Java SE1.6里锁一共有四种状态,无锁状态,偏向锁状态,轻量级锁状态和重量级锁状态,它会随着竞争情况逐渐升级。 锁可以升级但不能降级,意味着偏向锁升级成轻量级 阅读全文
posted @ 2021-03-08 22:59 猿必过 阅读(132) 评论(0) 推荐(0) 编辑
摘要: 前言 在做分布式链路追踪系统的时候,需要解决异步调用透传上下文的需求,特别是传递traceId,本文就线程池透传几种方式进行分析。 其他典型场景例子: 分布式跟踪系统 或 全链路压测(即链路打标) 日志收集记录系统上下文 Session级Cache 应用容器或上层框架跨应用代码给下层SDK传递信息 阅读全文
posted @ 2021-03-06 21:51 猿必过 阅读(1913) 评论(0) 推荐(0) 编辑
摘要: 线程池在开发中一定会用到,如果能像golang一样,java语言也有协程,也许java程序员就少了一种包袱。 回归正题,我们聊下到底有哪些线程池的使用方式,总结有以下几种。 JDK 内置线程池 Spring线程池 自己魔改封装 1、JDK 内置线程池 常用的有: 我们看下最全的线程池参数,探究为什么 阅读全文
posted @ 2021-03-04 09:17 猿必过 阅读(242) 评论(0) 推荐(0) 编辑
摘要: 线程状态的定义 可见在 JDK 中定义的线程状态总共六种,各状态在特定条件下可以转换,其组成了一个线程的生命周期,为了方便理解,对其状态和转换整理成了列表和状态图的形式。 状态 描述 NEW 线程新建但是还没有 start 的时候,即 new Thread() RUNNABLE 调用了 Thread 阅读全文
posted @ 2021-03-03 09:21 猿必过 阅读(1182) 评论(0) 推荐(0) 编辑
摘要: 某些业务场景需要在一个异步操作完成后做一个回调,如果使用Future有个问题,需要主动调用get然后再执行逻辑。但是异步逻辑不知道什么时候结束,所以推荐回调的方式处理比较优雅,本文总结了三种方式可以实现此类需求。 1、CompletableFuture Future可以明确地完成(设定其值和状态), 阅读全文
posted @ 2021-03-01 23:40 猿必过 阅读(153) 评论(0) 推荐(0) 编辑
摘要: ThreadPoolExecutor介绍 通过 ThreadPoolExecutor 创建线程池,API 如下所示: public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUn 阅读全文
posted @ 2021-03-01 00:19 猿必过 阅读(1242) 评论(0) 推荐(0) 编辑
摘要: 什么是JIT JIT 是 just in time 的缩写, 也就是即时编译编译器。 在运行时 JIT 会把翻译过的机器码保存起来,以备下次使用,因此从理论上来说,采用该 JIT 技术可以接近以前纯编译技术。下面我们看看,JIT 的工作过程。 备注:寄存器的使用是编译器的一个非常普遍的优化。寄存器的 阅读全文
posted @ 2021-02-26 15:43 猿必过 阅读(2834) 评论(0) 推荐(0) 编辑
摘要: CPU 资源占用过高 top 查看当前 CPU 情况,找到占用 CPU 过高的进程 PID=123。 top -H -p123 找出两个 CPU 占用较高的线程,记录下来 PID=2345, 3456 转换为十六进制。 jstack -l 123 > temp.txt 打印出当前进程的线程栈。 查找 阅读全文
posted @ 2021-02-25 09:32 猿必过 阅读(116) 评论(0) 推荐(0) 编辑
摘要: 强引用:new 出的对象之类的引用,只要强引用还在,永远不会回收。 强引用是使用最普遍的引用。如果一个对象具有强引用,那垃圾回收器绝不会回收它。如下: Object strongReference = new Object(); 软引用:引用但非必须的对象,内存溢出异常之前,回收。 软引用可以和一个 阅读全文
posted @ 2021-02-24 09:55 猿必过 阅读(454) 评论(0) 推荐(0) 编辑