![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
并发
文章平均质量分 83
qiaoHaoTing
这个作者很懒,什么都没留下…
展开
-
让程序员最爽的ThreadLocal使用姿势
一、常见场景1、ThreadLocal作为线程上下文副本,那么一种最常见的使用方式就是用来方法隐式传参,通过提供的set()和get()两个public方法来实现在不同的方法中的参数传递。对于编程规范来说,方法定义的时候是对参数个数是有限制的,甚至在一些大厂,对方法参数个数是有明确规定的。2、线程安全,每个线程维持自己的变量,以免紊乱,像常用的数据库的连接池的线程安全实现就使用了ThreadLocal。二、进阶使用 以参数传递为例子,如何更好地使...原创 2022-01-16 17:36:54 · 6260 阅读 · 8 评论 -
千万级实时并发计算设计
本文简单介绍一个系统监控告警AI异常检测实时计算的架构数据归一化由于数据采集工具多样性,自然导致数据格式的多样性,所以需要对数据格式进行统一。比如对数据库层面的监控、对应用层面的监控,主机的监控,网络的监控,每种监控采用的方式不一样,工具不一样,采集出来的数据格式也会不一样,作为告警引擎中心,需要对监控采集值的格式进行转换,统一格式。当采集端把数据传输过来的时候,先通过一个数据转换的应用(代理)把数据处理成统一的格式。又由于网络环境的不一,同时加上安全要求,还需要对不同的环境提供不同的接收方式,一种原创 2021-01-10 15:23:30 · 432 阅读 · 1 评论 -
commons-lang2.6在高并发下使用ExceptionUtils.getFullStackTrace()获取异常详情导致的性能下降
某天,在不知情的情况下,实施私自接入了某其他平台数据,由于数据不规范,导致生产出现阶段性大面积异常报错,有大量线程阻塞,处于BLOCKED状态,应用性能下降一倍。通过线程堆栈日志定位到:阻塞线程都阻塞在org.apache.commons.lang.exception.ExceptionUtils.getCause()处,并且在等待的是一个对象锁,查看源码(commons-lang的2.6版本)发现getCause中会先获取锁,然后通过反射的方式获取异常的详情,反射存在性能问题,在高并发下,导致大量线程阻塞原创 2021-01-06 21:22:58 · 137949 阅读 · 1 评论 -
SpringBoot定时调度Scheduled默认配置(单线程)导致的业务延迟
项目后台组件运用了Schedule每分钟启动一个job把数据发送到kafka(生产者),通过kafka的负载均衡分发到消费者中。在某个夜黑风高的夜晚,运维GG通过监控发现kafka写入出现每分钟不连续的现象,在没有数据写入的时段,消费线程一直处于等待状态。由于除了生产者任务job之外,还在存在其他定时job,随着业务的发展,其他job的数据量上升之后,加上Schedule调度使用了默认的配置,在一个分钟内处理不完所有的定时job,导致下一分钟的job任务得到不到执行,从而导致了业务延迟。通过下面的例子来原创 2020-12-15 01:05:01 · 140651 阅读 · 1 评论 -
Java死锁可以这样来理解
原创 2020-11-29 21:57:32 · 214 阅读 · 0 评论