线程中断不是强杀:一次讲透Java优雅停机
很多人学 Java 多线程,一听说“让线程停下来”,第一反应是调用一个叫 stop() 的老方法。这个想法得赶紧改过来——stop() 早就被标记为废弃了,它相当于“拔电源”,线程停在哪一步没人知道,数据可能写一半就断了。Java 官方推荐的姿势是“商量”,不是“强杀”。
线程饥饿,就是倒霉的线程
在并发线程中的,线程饥饿的问题,我喜欢用一个名词来描述它:叫倒霉的线程。为啥说它倒霉呢,因为这个线程足够的努力,也足够的积极,但是始终无法得到资源,努力着,但也苦苦的等待着。且还存在一种现象,本该轮到它的机会,却被抢占了,导致它继续苦苦的努力和等待。你们说,它惨不惨? 。
一文读懂Java异常类层次结构!搞清Error、Exception、运行时异常
做Java开发,没有人能绕开异常。日常写代码时的空指针报错、数组越界、类型转换失败、文件找不到、数据库连接超时,这些统统都是Java异常。大部分程序员只会简单使用 try-catch 捕获异常、throws 抛出异常,但绝大多数人都搞不清楚:Java异常体系到底是怎么分层的?
SpringBoot 配置热更新实战:不重启服务,限流阈值
大促前一小时,运营跑来说秒杀接口的限流阈值要从 200 提到 800。改配置,打包,重启,三台机器滚动发布一轮下来,二十分钟没了,重启窗口里的下单请求全部失败。这种事碰到几次之后,多数团队会想到两个办法:要么上配置中心,要么忍着。
Java服务CPU瞬间拉满100%,接口超时卡死完整排查修复方案)
线上真实故障复盘:大家在工作中几乎都会遇到一个噩梦场景:服务突然CPU飙升到100%、接口大面积超时、页面卡顿、重启后短暂恢复,过一会再次炸裂。网上很多教程只讲命令、不讲真实根因,或者只有结论没有可复现代码。
Java线程死锁导致服务假死、接口全阻塞怎么解决
生产致命故障复盘:Java线程死锁导致服务假死、接口全阻塞(完整可复现+专业排查+底层根因根治)在Java线上故障中,线程死锁是比CPU飙高、内存溢出更隐蔽、更致命的问题。
多核CPU的混乱,你的代码在乱跑?JMM帮你搞定并发。
以前单核CPU时代,写程序挺简单的,一个线程从头跑到尾,没啥乱七八糟的问题。但现在多核了,多个线程同时干活,却冒出各种怪事:明明写了个值,另一个线程死活看不见,或者代码顺序被悄悄调换了。Java内存模型(JMM)就是来解决这些破事的,让咱们程序员不用去管硬件底层的那些弯弯绕绕。
32-线程池打满导致接口超时:参数配置与监控体系
#线程池 #性能调优 #线上问题排查 #Arthas #JDK8版本声明:本文基于 JDK 8(1.8.0_x) 与 Arthas 4.x 编写。
Java 并发调用最难收拾的不是慢,而是有任务失联
一个接口同时查库存、价格和用户权益,看上去只是把三次远程调用并行化。真正麻烦的时刻发生在请求已经超时之后:主线程返回了,某个子任务还在后台跑;另一个子任务抛出异常,却没人及时取消其余工作;日志里只有零散的线程名,无法确认它们原本属于哪次请求。